杨东明 发表于 2021-6-23 11:05:50

请教下这个为啥会报错?

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()

Daniel_Zhang 发表于 2021-6-23 11:05:51

问题的主要原因是,你的系统的编码格式是 gbk

但是你的 txt 文件的编码格式非 gbk,一般是 utf-8

当你没有设定编码格式时,会默认为使用系统自身的编码格式,即你这里的 gbk

gbk 自然不能读取你 txt 里面的 utf-8 的数据,就会报错

两种解决方案,

- 原 txt 文件改成 gbk 格式,但是这种值针对于允许修改原 txt 文件的情况
- 如果原文件不允许修改的情况下,在 open 文件的时候,给定你所需要使用的编码格式,即 txt 文件的编码格式 (此处应该是 utf-8 格式,看不到你的文件编码格式,所以只能猜测)

杨东明 发表于 2021-6-23 11:06:34

29讲 课后作业第一题 . 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图:

杨东明 发表于 2021-6-23 11:07:50

原来姹紫嫣红开遍
似这般都付与断井颓垣
良辰美景奈何天
赏心乐事谁家院
朝飞暮卷,云霞翠轩,雨丝风片,烟波画船
锦屏人忒看这韶光贱
梦长梦短俱是梦
年来年去是何年
这般花花草草由人恋
生生死死随人愿,便酸酸楚楚无人怨
待打并香魂一片,阴雨梅天,守的个梅根相见
三分春色描来易,一段伤心画出难

杨东明 发表于 2021-6-23 11:09:13

这个是我弄的一个txt文件里的内容,附件不知道为啥传不上来,我把这个内容改一两个字来当做这个题目需要的两个文件

杨东明 发表于 2021-6-23 11:09:53

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

这是报错

逃兵 发表于 2021-6-23 11:12:21

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:15:41

本帖最后由 灰晨 于 2021-6-23 11:17 编辑

f = open(temp1)
d = open(temp2)
应该是这里的问题,open(‘文件名’,'r',encoding="GBK")
试试加上打开模式和编码
模式r,w,a,只读,写,追加
r+,w+,读写
encoding编码,常用GBK,utf-8

nahongyan1997 发表于 2021-6-23 12:04:59

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()

杨东明 发表于 2021-6-23 15:37:29

Daniel_Zhang 发表于 2021-6-23 11:05
问题的主要原因是,你的系统的编码格式是 gbk

但是你的 txt 文件的编码格式非 gbk,一般是 utf-8


谢谢谢谢{:9_226:}

杨东明 发表于 2021-6-23 15:38:23

灰晨 发表于 2021-6-23 11:15
f = open(temp1)
d = open(temp2)
应该是这里的问题,open(‘文件名’,'r',encoding="GBK")


谢谢谢谢{:9_226:}

杨东明 发表于 2021-6-23 15:41:28

nahongyan1997 发表于 2021-6-23 12:04


谢谢谢谢{:9_226:}

杨东明 发表于 2021-6-23 15:42:55

逃兵 发表于 2021-6-23 11:12


谢谢谢谢{:9_226:}
页: [1]
查看完整版本: 请教下这个为啥会报错?