鱼C论坛

 找回密码
 立即注册
查看: 3296|回复: 14

[已解决]读取文件的疑惑

[复制链接]
发表于 2022-6-28 19:16:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'''比较文件'''

a=input('请输入要比较的头一个文件名:')
b=input('请输入要比较的另一个文件名:')

def v():
    c=open(a,'rb')                 
    d=open(b,'rb')
    e=0
    f=[]
    for i in c:
        j=d.readline()
            
        e+=1
        if i!=j:
            f.append(e)
    c.close()
    d.close()
    return f

f=v()
if len(f)==0:
    print('完全相同')
else:
    print('有%d处不同' % len(f))
    for i in f:
        print('第%d行不同' % i)

这个程序中我真实的创建了两个txt文件,但是在运行时程序错误,我最后把‘.txt’去掉, 在   c=open(a,'rb')                d=open(b,'rb')   这两个打开文件是加入‘rb’ 才能正常运行(还是误打误撞才能运行的)
1.想问一下这个程序我应该怎么改写,就不需要加入这‘rb’,不需要去掉‘.txt’才能正常运行
2.这个rb的 意义是什么,为什么我加入‘wb’不行
3.这个运行程序开始是输入两个文件名,必须把全名包括扩展名输入才能找到吗?
4.txt文件去掉扩展名之后还能打开,是不是说明文件没有变化??
最佳答案
2022-7-1 09:01:37

1.想问一下这个程序我应该怎么改写,就不需要加入这‘rb’,不需要去掉‘.txt’才能正常运行


想知道你的报错是什么,我认为你应该电脑上的文件浏览器中没有打开显示后缀,导致你加上 .txt 实际上文件名就为  xxx.txt.txt 了

2.这个rb的 意义是什么,为什么我加入‘wb’不行


rb 以二进制模式读取文件,读取到的都是文件的二进制数据

3.这个运行程序开始是输入两个文件名,必须把全名包括扩展名输入才能找到吗?


文件名必须完整, a.txt 和 a 是两个完全不同的文件

4.txt文件去掉扩展名之后还能打开,是不是说明文件没有变化??


同问题一,看到问题4 我确定你电脑中资源管理器没有设置显示后缀,后缀自动隐藏了,所以这里你可以去开启下:


                               
登录/注册后可看大图


若一个文件没有后缀,那么打开文件时,电脑一般会询问你用什么程序打开,因为没有后缀的文件一般没有直接关联的打开应用,所以电脑对你进行询问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-28 19:52:26 | 显示全部楼层
我刚刚测试了一下,只有VS code这个编辑器会报这个错误,如第二张图所示,其他比如直接运行(如第一张图)或者使用pycharm(如第三张图所示)都可以直接运行,代码如下
'''比较文件'''


# a=input('请输入要比较的头一个文件名:')
# b=input('请输入要比较的另一个文件名:')

def v():
    c = open('1.txt')
    d = open('2.txt')
    e = 0
    f = []
    for i in c:
        j = d.readline()

        e += 1
        if i != j:
            f.append(e)
    c.close()
    d.close()
    return f


f = v()
if len(f) == 0:
    print('完全相同')
else:
    print('有%d处不同' % len(f))
    for i in f:
        print('第%d行不同' % i)
rb只是读取的参数,表示本次将使用二进制文本形式读取该文件,详情解释可以查一查,第一张图是我查到的,可以参考
1.png
2.png
3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-28 19:54:22 | 显示全部楼层
图的顺序可能乱了,补充一个vscode运行的结果
4.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-28 20:02:23 | 显示全部楼层
当初约定 发表于 2022-6-28 19:54
图的顺序可能乱了,补充一个vscode运行的结果

大神我刚开始接触,这里只有IDLE这一个 别的都没有,我得IDLE 要是没有‘rb’,就显示错误!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-28 20:36:26 | 显示全部楼层
asa616628217 发表于 2022-6-28 20:02
大神我刚开始接触,这里只有IDLE这一个 别的都没有,我得IDLE 要是没有‘rb’,就显示错误!!

那建议去安装一个pycharm吧,这个官网有社区版,免费的,指路:https://www.jetbrains.com/pycharm/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-28 21:54:56 | 显示全部楼层
当初约定 发表于 2022-6-28 20:36
那建议去安装一个pycharm吧,这个官网有社区版,免费的,指路:https://www.jetbrains.com/pycharm/
{:1 ...

那个不会   我就是想问问,这个‘rb’为啥必须有,小甲鱼的代码里边也没有‘rb’,我运行了一下也是出现错误 这是什么原因啊??
还是说也给没有‘rb’,需要特殊的文件吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-28 22:05:17 | 显示全部楼层
asa616628217 发表于 2022-6-28 21:54
那个不会   我就是想问问,这个‘rb’为啥必须有,小甲鱼的代码里边也没有‘rb’,我运行了一下也是出现 ...

“rb”不一定需要的,这个是一个参数,当你以二进制形式操作文件的时候才需要这个参数,也不需要啥特殊文件,如果说特殊的话那就是一般操作文件的话是操作.bat后缀的文件(这个是我在C语言学到的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-28 22:07:17 | 显示全部楼层
asa616628217 发表于 2022-6-28 21:54
那个不会   我就是想问问,这个‘rb’为啥必须有,小甲鱼的代码里边也没有‘rb’,我运行了一下也是出现 ...

这里如果说报错说找不到文件和是否有这个rb参数是没有关系的,主要是路径问题,IDE(编辑器)不一样可能导致运行的时候会有不同的结果,这个就是通常所说的运行环境不一样导致的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-28 23:25:38 | 显示全部楼层
当初约定 发表于 2022-6-28 22:05
“rb”不一定需要的,这个是一个参数,当你以二进制形式操作文件的时候才需要这个参数,也不需要啥特殊文 ...

在IDLE中 没有这个 都是出现错误的! 加上就能正常运行了。
如果不加就出现这个错误:
for  i in c
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position 6: illegal multibyte sequence
查了查也不懂这是什么意思啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 09:01:37 | 显示全部楼层    本楼为最佳答案   

1.想问一下这个程序我应该怎么改写,就不需要加入这‘rb’,不需要去掉‘.txt’才能正常运行


想知道你的报错是什么,我认为你应该电脑上的文件浏览器中没有打开显示后缀,导致你加上 .txt 实际上文件名就为  xxx.txt.txt 了

2.这个rb的 意义是什么,为什么我加入‘wb’不行


rb 以二进制模式读取文件,读取到的都是文件的二进制数据

3.这个运行程序开始是输入两个文件名,必须把全名包括扩展名输入才能找到吗?


文件名必须完整, a.txt 和 a 是两个完全不同的文件

4.txt文件去掉扩展名之后还能打开,是不是说明文件没有变化??


同问题一,看到问题4 我确定你电脑中资源管理器没有设置显示后缀,后缀自动隐藏了,所以这里你可以去开启下:


                               
登录/注册后可看大图


若一个文件没有后缀,那么打开文件时,电脑一般会询问你用什么程序打开,因为没有后缀的文件一般没有直接关联的打开应用,所以电脑对你进行询问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-1 09:56:07 | 显示全部楼层
Twilight6 发表于 2022-7-1 09:01
想知道你的报错是什么,我认为你应该电脑上的文件浏览器中没有打开显示后缀,导致你加上 .txt 实际上 ...

扩展名已经打开了  
不加‘rb’出现这个错误
   for i in c:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 13: illegal multibyte sequence

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 10:32:07 | 显示全部楼层
asa616628217 发表于 2022-7-1 09:56
扩展名已经打开了  
不加‘rb’出现这个错误
   for i in c:



编码错误,文件编码和open 打开编码不一致导致的

在 open 中加入参数 encoding = "utf-8"

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-1 16:05:27 | 显示全部楼层
Twilight6 发表于 2022-7-1 10:32
编码错误,文件编码和open 打开编码不一致导致的

在 open 中加入参数 encoding = "utf-8"

大神确实是加入encoding='utf-8'  ,正常运行,
大神 这个编码错误是不是python建立的txt 文件和在Windows下建立的txt文件编码不同?
我刚才实验了用IDLE建立了两个txt文件 不加‘rb’就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-1 16:15:41 | 显示全部楼层
asa616628217 发表于 2022-7-1 16:05
大神确实是加入encoding='utf-8'  ,正常运行,
大神 这个编码错误是不是python建立的txt 文件和在Window ...



文件编码,读取时的编码和写入时的编码需要一致才不会出现编码报错

例如,gbk 在写入中文字符时,一般使用 2个字节,而 utf-8 在写入中文字符时一般为 3 字节

当你文件是 gbk 编码,有部分内容为中文时,使用 utf-8 就会多读取一个字节,导致解码出错

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-2 13:26:56 | 显示全部楼层
Twilight6 发表于 2022-7-1 16:15
文件编码,读取时的编码和写入时的编码需要一致才不会出现编码报错

例如,gbk 在写入中文字符时, ...

这个虽然还不懂  前边的谢谢大神了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 21:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表