请教下这个为啥会报错?
file_name1 = input('请输入比较的第一个文件名:')file_name2 = input('请输入比较的第二个文件名:')
temp1 = 'D:\\' + file_name1 + '.txt'
temp2 = 'D:\\' + file_name2 + '.txt'
f = open(temp1)
d = open(temp2)
count = 0
differ = []
for line1 in f:
line2 = d.readline()
count += 1
if line2 != line1:
differ.append(count)
print ('一共有%d处不同' %len(differ))
for each in differ:
print ('第%d行不同' %each)
f.close()
d.close()
问题的主要原因是,你的系统的编码格式是 gbk
但是你的 txt 文件的编码格式非 gbk,一般是 utf-8
当你没有设定编码格式时,会默认为使用系统自身的编码格式,即你这里的 gbk
gbk 自然不能读取你 txt 里面的 utf-8 的数据,就会报错
两种解决方案,
- 原 txt 文件改成 gbk 格式,但是这种值针对于允许修改原 txt 文件的情况
- 如果原文件不允许修改的情况下,在 open 文件的时候,给定你所需要使用的编码格式,即 txt 文件的编码格式 (此处应该是 utf-8 格式,看不到你的文件编码格式,所以只能猜测) 29讲 课后作业第一题 . 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图: 原来姹紫嫣红开遍
似这般都付与断井颓垣
良辰美景奈何天
赏心乐事谁家院
朝飞暮卷,云霞翠轩,雨丝风片,烟波画船
锦屏人忒看这韶光贱
梦长梦短俱是梦
年来年去是何年
这般花花草草由人恋
生生死死随人愿,便酸酸楚楚无人怨
待打并香魂一片,阴雨梅天,守的个梅根相见
三分春色描来易,一段伤心画出难 这个是我弄的一个txt文件里的内容,附件不知道为啥传不上来,我把这个内容改一两个字来当做这个题目需要的两个文件 Traceback (most recent call last):
File "D:/python project/第二十九节课/比较文件内容不同.py", line 14, in <module>
for line1 in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 20: illegal multibyte sequence
这是报错
file_name1 = input('请输入比较的第一个文件名:')
file_name2 = input('请输入比较的第二个文件名:')
temp1 = 'D:\\' + file_name1 + '.txt'
temp2 = 'D:\\' + file_name2 + '.txt'
f = open(temp1,encoding = 'utf-8')
d = open(temp2,encoding = 'utf-8')
count = 0
differ = []
for line1 in f:
line2 = d.readline()
count += 1
if line2 != line1:
differ.append(count)
print ('一共有%d处不同' %len(differ))
for each in differ:
print ('第%d行不同' %each)
f.close()
d.close()
本帖最后由 灰晨 于 2021-6-23 11:17 编辑
f = open(temp1)
d = open(temp2)
应该是这里的问题,open(‘文件名’,'r',encoding="GBK")
试试加上打开模式和编码
模式r,w,a,只读,写,追加
r+,w+,读写
encoding编码,常用GBK,utf-8 file_name1 = input('请输入比较的第一个文件名:')
file_name2 = input('请输入比较的第二个文件名:')
temp1 = 'D:\\' + file_name1 + '.txt'
temp2 = 'D:\\' + file_name2 + '.txt'
f = open(temp1,"rt",encoding="gbk")
d = open(temp2,"rt",encoding="gbk")
count = 0
differ = []
for line1 in f:
line2 = d.readline()
count += 1
if line2 != line1:
differ.append(count)
print ('一共有%d处不同' %len(differ))
for each in differ:
print ('第%d行不同' %each)
f.close()
d.close()
Daniel_Zhang 发表于 2021-6-23 11:05
问题的主要原因是,你的系统的编码格式是 gbk
但是你的 txt 文件的编码格式非 gbk,一般是 utf-8
谢谢谢谢{:9_226:} 灰晨 发表于 2021-6-23 11:15
f = open(temp1)
d = open(temp2)
应该是这里的问题,open(‘文件名’,'r',encoding="GBK")
谢谢谢谢{:9_226:} nahongyan1997 发表于 2021-6-23 12:04
谢谢谢谢{:9_226:} 逃兵 发表于 2021-6-23 11:12
谢谢谢谢{:9_226:}
页:
[1]