鱼C论坛

 找回密码
 立即注册
查看: 1659|回复: 12

[已解决]请教下这个为啥会报错?

[复制链接]
发表于 2021-6-23 11:05:50 | 显示全部楼层 |阅读模式
7鱼币
  1. file_name1 = input('请输入比较的第一个文件名:')
  2. file_name2 = input('请输入比较的第二个文件名:')
  3. temp1 = 'D:\\' + file_name1 + '.txt'
  4. temp2 = 'D:\\' + file_name2 + '.txt'
  5. f = open(temp1)
  6. d = open(temp2)
  7. count = 0
  8. differ = []
  9. for line1 in f:
  10.     line2 = d.readline()
  11.     count += 1
  12.     if line2 != line1:
  13.         differ.append(count)
  14. print ('一共有%d处不同' %len(differ))
  15. for each in differ:
  16.     print ('第%d行不同' %each)
  17. f.close()
  18. d.close()
复制代码
最佳答案
2021-6-23 11:05:51
问题的主要原因是,你的系统的编码格式是 gbk

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

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

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

两种解决方案,

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

最佳答案

查看完整内容

问题的主要原因是,你的系统的编码格式是 gbk 但是你的 txt 文件的编码格式非 gbk,一般是 utf-8 当你没有设定编码格式时,会默认为使用系统自身的编码格式,即你这里的 gbk gbk 自然不能读取你 txt 里面的 utf-8 的数据,就会报错 两种解决方案, - 原 txt 文件改成 gbk 格式,但是这种值针对于允许修改原 txt 文件的情况 - 如果原文件不允许修改的情况下,在 open 文件的时候,给定你所需要使用的编码格式,即 txt 文件的 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-23 11:05:51 | 显示全部楼层    本楼为最佳答案   
问题的主要原因是,你的系统的编码格式是 gbk

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

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

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

两种解决方案,

- 原 txt 文件改成 gbk 格式,但是这种值针对于允许修改原 txt 文件的情况
- 如果原文件不允许修改的情况下,在 open 文件的时候,给定你所需要使用的编码格式,即 txt 文件的编码格式 (此处应该是 utf-8 格式,看不到你的文件编码格式,所以只能猜测)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-23 11:06:34 | 显示全部楼层
29讲 课后作业第一题 . 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-23 11:07:50 | 显示全部楼层
原来姹紫嫣红开遍
似这般都付与断井颓垣
良辰美景奈何天
赏心乐事谁家院
朝飞暮卷,云霞翠轩,雨丝风片,烟波画船
锦屏人忒看这韶光贱
梦长梦短俱是梦
年来年去是何年
这般花花草草由人恋
生生死死随人愿,便酸酸楚楚无人怨
待打并香魂一片,阴雨梅天,守的个梅根相见
三分春色描来易,一段伤心画出难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-23 11:09:13 | 显示全部楼层
这个是我弄的一个txt文件里的内容,附件不知道为啥传不上来,我把这个内容改一两个字来当做这个题目需要的两个文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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

这是报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-23 11:12:21 | 显示全部楼层
  1. file_name1 = input('请输入比较的第一个文件名:')
  2. file_name2 = input('请输入比较的第二个文件名:')
  3. temp1 = 'D:\\' + file_name1 + '.txt'
  4. temp2 = 'D:\\' + file_name2 + '.txt'
  5. f = open(temp1,encoding = 'utf-8')
  6. d = open(temp2,encoding = 'utf-8')
  7. count = 0
  8. differ = []
  9. for line1 in f:
  10.     line2 = d.readline()
  11.     count += 1
  12.     if line2 != line1:
  13.         differ.append(count)
  14. print ('一共有%d处不同' %len(differ))
  15. for each in differ:
  16.     print ('第%d行不同' %each)
  17. f.close()
  18. d.close()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-23 12:04:59 | 显示全部楼层
  1. file_name1 = input('请输入比较的第一个文件名:')
  2. file_name2 = input('请输入比较的第二个文件名:')
  3. temp1 = 'D:\\' + file_name1 + '.txt'
  4. temp2 = 'D:\\' + file_name2 + '.txt'
  5. f = open(temp1,"rt",encoding="gbk")
  6. d = open(temp2,"rt",encoding="gbk")
  7. count = 0
  8. differ = []
  9. for line1 in f:
  10.     line2 = d.readline()
  11.     count += 1
  12.     if line2 != line1:
  13.         differ.append(count)
  14. print ('一共有%d处不同' %len(differ))
  15. for each in differ:
  16.     print ('第%d行不同' %each)
  17. f.close()
  18. d.close()

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-23 15:37:29 | 显示全部楼层
Daniel_Zhang 发表于 2021-6-23 11:05
问题的主要原因是,你的系统的编码格式是 gbk

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

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

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2021-6-23 15:41:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-23 15:42:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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