读取文件的疑惑
'''比较文件'''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文件去掉扩展名之后还能打开,是不是说明文件没有变化??
我刚刚测试了一下,只有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只是读取的参数,表示本次将使用二进制文本形式读取该文件,详情解释可以查一查,第一张图是我查到的,可以参考{:10_256:} 图的顺序可能乱了,补充一个vscode运行的结果 当初约定 发表于 2022-6-28 19:54
图的顺序可能乱了,补充一个vscode运行的结果
大神我刚开始接触,这里只有IDLE这一个 别的都没有,我得IDLE 要是没有‘rb’,就显示错误!! asa616628217 发表于 2022-6-28 20:02
大神我刚开始接触,这里只有IDLE这一个 别的都没有,我得IDLE 要是没有‘rb’,就显示错误!!
那建议去安装一个pycharm吧,这个官网有社区版,免费的,指路:https://www.jetbrains.com/pycharm/
{:10_256:} 当初约定 发表于 2022-6-28 20:36
那建议去安装一个pycharm吧,这个官网有社区版,免费的,指路:https://www.jetbrains.com/pycharm/
{:1 ...
那个不会 我就是想问问,这个‘rb’为啥必须有,小甲鱼的代码里边也没有‘rb’,我运行了一下也是出现错误 这是什么原因啊??
还是说也给没有‘rb’,需要特殊的文件吗?
asa616628217 发表于 2022-6-28 21:54
那个不会 我就是想问问,这个‘rb’为啥必须有,小甲鱼的代码里边也没有‘rb’,我运行了一下也是出现 ...
“rb”不一定需要的,这个是一个参数,当你以二进制形式操作文件的时候才需要这个参数,也不需要啥特殊文件,如果说特殊的话那就是一般操作文件的话是操作.bat后缀的文件(这个是我在C语言学到的) asa616628217 发表于 2022-6-28 21:54
那个不会 我就是想问问,这个‘rb’为啥必须有,小甲鱼的代码里边也没有‘rb’,我运行了一下也是出现 ...
这里如果说报错说找不到文件和是否有这个rb参数是没有关系的,主要是路径问题,IDE(编辑器)不一样可能导致运行的时候会有不同的结果,这个就是通常所说的运行环境不一样导致的 当初约定 发表于 2022-6-28 22:05
“rb”不一定需要的,这个是一个参数,当你以二进制形式操作文件的时候才需要这个参数,也不需要啥特殊文 ...
在IDLE中 没有这个 都是出现错误的! 加上就能正常运行了。
如果不加就出现这个错误:
fori in c
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb4 in position 6: illegal multibyte sequence
查了查也不懂这是什么意思啊?
1.想问一下这个程序我应该怎么改写,就不需要加入这‘rb’,不需要去掉‘.txt’才能正常运行
想知道你的报错是什么,我认为你应该电脑上的文件浏览器中没有打开显示后缀,导致你加上 .txt 实际上文件名就为xxx.txt.txt 了
2.这个rb的 意义是什么,为什么我加入‘wb’不行
rb 以二进制模式读取文件,读取到的都是文件的二进制数据
3.这个运行程序开始是输入两个文件名,必须把全名包括扩展名输入才能找到吗?
文件名必须完整, a.txt 和 a 是两个完全不同的文件
4.txt文件去掉扩展名之后还能打开,是不是说明文件没有变化??
同问题一,看到问题4 我确定你电脑中资源管理器没有设置显示后缀,后缀自动隐藏了,所以这里你可以去开启下:
https://xxx.ilovefishc.com/album/202005/18/134028ubtgeyabcpzpuvpa.png
若一个文件没有后缀,那么打开文件时,电脑一般会询问你用什么程序打开,因为没有后缀的文件一般没有直接关联的打开应用,所以电脑对你进行询问 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
asa616628217 发表于 2022-7-1 09:56
扩展名已经打开了
不加‘rb’出现这个错误
for i in c:
编码错误,文件编码和open 打开编码不一致导致的
在 open 中加入参数 encoding = "utf-8"
Twilight6 发表于 2022-7-1 10:32
编码错误,文件编码和open 打开编码不一致导致的
在 open 中加入参数 encoding = "utf-8"
大神确实是加入encoding='utf-8',正常运行,
大神 这个编码错误是不是python建立的txt 文件和在Windows下建立的txt文件编码不同?
我刚才实验了用IDLE建立了两个txt文件 不加‘rb’就行了 asa616628217 发表于 2022-7-1 16:05
大神确实是加入encoding='utf-8',正常运行,
大神 这个编码错误是不是python建立的txt 文件和在Window ...
文件编码,读取时的编码和写入时的编码需要一致才不会出现编码报错
例如,gbk 在写入中文字符时,一般使用 2个字节,而 utf-8 在写入中文字符时一般为 3 字节
当你文件是 gbk 编码,有部分内容为中文时,使用 utf-8 就会多读取一个字节,导致解码出错
Twilight6 发表于 2022-7-1 16:15
文件编码,读取时的编码和写入时的编码需要一致才不会出现编码报错
例如,gbk 在写入中文字符时, ...
这个虽然还不懂前边的谢谢大神了
页:
[1]