鱼C论坛

 找回密码
 立即注册
查看: 1234|回复: 17

[已解决]python 029 第一题

[复制链接]
发表于 2020-5-24 21:39:36 | 显示全部楼层 |阅读模式

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

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

x
  1. #比较用户输入的两个文件
  2. def compare_file(file_name_1,file_name_2):
  3.     f1 = open(file_name_1)
  4.     f2 = open(file_name_2)
  5.     count = 0    #统计行数
  6.     differ = []    #统计不一样的行的位置

  7.     for each_line_1 in f1:
  8.         f2.seek(0)     #调节内循环文件指针到文档初始位置
  9.         for each_line_2 in f2:
  10.             count += 1
  11.             if each_line_1 != each_line_2:
  12.                 differ.append(count)

  13.     f1.close()
  14.     f2.close()
  15.     return differ
  16.                
  17.                
  18. file_name_1 = input("请输入需要比较的头一个文件名:")
  19. file_name_2 = input("请输入需要比较的另一个文件名:")
  20. compare_file(file_name_1,file_name_2)

  21. length = len(differ)

  22. if length == 0:
  23.     print("两个文件完全相同!")
  24. else:
  25.     print("两个文件共有【%d】"%length)

  26.     for each in differ:
  27.         print("第%d行不一样"%each)
复制代码

图片中出现的非法多字节序列的错误该怎么解决呢,不知道怎么来的
最佳答案
2020-5-24 21:41:15
open里面加上 encoding = 'utf-8'

  1. #比较用户输入的两个文件
  2. def compare_file(file_name_1,file_name_2):
  3.     f1 = open(file_name_1,encoding='utf-8')
  4.     f2 = open(file_name_2,encoding='utf-8')
  5.     count = 0    #统计行数
  6.     differ = []    #统计不一样的行的位置

  7.     for each_line_1 in f1:
  8.         f2.seek(0)     #调节内循环文件指针到文档初始位置
  9.         for each_line_2 in f2:
  10.             count += 1
  11.             if each_line_1 != each_line_2:
  12.                 differ.append(count)

  13.     f1.close()
  14.     f2.close()
  15.     return differ
  16.                
  17.                
  18. file_name_1 = input("请输入需要比较的头一个文件名:")
  19. file_name_2 = input("请输入需要比较的另一个文件名:")
  20. compare_file(file_name_1,file_name_2)

  21. length = len(differ)

  22. if length == 0:
  23.     print("两个文件完全相同!")
  24. else:
  25.     print("两个文件共有【%d】"%length)

  26.     for each in differ:
  27.         print("第%d行不一样"%each)
复制代码
QQ图片20200524213425.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-24 21:41:15 | 显示全部楼层    本楼为最佳答案   
open里面加上 encoding = 'utf-8'

  1. #比较用户输入的两个文件
  2. def compare_file(file_name_1,file_name_2):
  3.     f1 = open(file_name_1,encoding='utf-8')
  4.     f2 = open(file_name_2,encoding='utf-8')
  5.     count = 0    #统计行数
  6.     differ = []    #统计不一样的行的位置

  7.     for each_line_1 in f1:
  8.         f2.seek(0)     #调节内循环文件指针到文档初始位置
  9.         for each_line_2 in f2:
  10.             count += 1
  11.             if each_line_1 != each_line_2:
  12.                 differ.append(count)

  13.     f1.close()
  14.     f2.close()
  15.     return differ
  16.                
  17.                
  18. file_name_1 = input("请输入需要比较的头一个文件名:")
  19. file_name_2 = input("请输入需要比较的另一个文件名:")
  20. compare_file(file_name_1,file_name_2)

  21. length = len(differ)

  22. if length == 0:
  23.     print("两个文件完全相同!")
  24. else:
  25.     print("两个文件共有【%d】"%length)

  26.     for each in differ:
  27.         print("第%d行不一样"%each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 21:41:33 | 显示全部楼层
open加个参数:
encoding="utf-8"
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 21:41:44 | 显示全部楼层
是我文件有问题嘛?  因为我运行小甲鱼的代码也是出现一样的错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 21:43:00 | 显示全部楼层
莫待无花空折枝 发表于 2020-5-24 21:41
是我文件有问题嘛?  因为我运行小甲鱼的代码也是出现一样的错误


不是 电脑不一样  有的编码和文本的编码不能对应上就无法解码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 21:51:42 | 显示全部楼层
Twilight6 发表于 2020-5-24 21:41
open里面加上 encoding = 'utf-8'
  1. 请输入需要比较的头一个文件名:something.txt
  2. 请输入需要比较的另一个文件名:something2.txt
  3. Traceback (most recent call last):
  4.   File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 22, in <module>
  5.     compare_file(file_name_1,file_name_2)
  6.   File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 8, in compare_file
  7.     for each_line_1 in f1:
  8.   File "D:\python3.7\lib\codecs.py", line 322, in decode
  9.     (result, consumed) = self._buffer_decode(data, self.errors, final)
  10. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 0: invalid start byte
复制代码

又出现这个错误 看都看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 21:54:12 | 显示全部楼层
莫待无花空折枝 发表于 2020-5-24 21:51
又出现这个错误 看都看不懂

emmm  那试试 把 utf-8  改成 GB18030
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 21:55:33 | 显示全部楼层
Twilight6 发表于 2020-5-24 21:54
emmm  那试试 把 utf-8  改成 GB18030

疯狂尝试
话说你最佳和我一样多了

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
Twilight6 + 2 + 2 蟹蟹

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 21:56:54 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-24 21:55
疯狂尝试
话说你最佳和我一样多了

哈哈  

我想破 300 这个月

评分

参与人数 2荣誉 +1 鱼币 +8 收起 理由
莫待无花空折枝 + 5
永恒的蓝色梦想 + 1 + 3 加油

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-5-24 22:04:02 | 显示全部楼层
Twilight6 发表于 2020-5-24 21:54
emmm  那试试 把 utf-8  改成 GB18030
  1. 请输入需要比较的头一个文件名:something.txt
  2. 请输入需要比较的另一个文件名:something2.txt
  3. Traceback (most recent call last):
  4.   File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 20, in <module>
  5.     differ = file_compare(file1, file2)
  6.   File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 8, in file_compare
  7.     line2 = f2.readline()
  8. UnicodeDecodeError: 'gb18030' codec can't decode byte 0x80 in position 20: illegal multibyte sequence
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 22:04:30 | 显示全部楼层

哈哈 什么鬼怎么什么编码都不行...有毒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 22:05:06 | 显示全部楼层
本帖最后由 Twilight6 于 2020-5-25 07:22 编辑


你重新创建txt文件时候选择以 utf-8 编码保存


记事本.png
123、.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 22:07:45 | 显示全部楼层

以 utf-8 编码保存  看楼上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 22:21:49 | 显示全部楼层
Twilight6 发表于 2020-5-24 22:05
你重新创建txt文件时候选择以 utf-8 编码保存




  1. 请输入需要比较的头一个文件名:something.txt
  2. 请输入需要比较的另一个文件名:something2.txt
  3. 两个文件共有【187】处不同:
  4. 第 2 行不一样
  5. 第 3 行不一样
  6. 第 4 行不一样
  7. 第 5 行不一样
  8. 第 6 行不一样
  9. 第 7 行不一样
  10. 第 8 行不一样
  11. 第 9 行不一样
  12. 第 10 行不一样
  13. 第 11 行不一样
  14. 第 12 行不一样
  15. 第 13 行不一样
  16. 第 14 行不一样
  17. 第 15 行不一样
  18. 第 17 行不一样
  19. 第 18 行不一样
  20. 第 19 行不一样
  21. 第 20 行不一样
  22. 第 21 行不一样
  23. 第 22 行不一样
  24. 第 23 行不一样
  25. 第 24 行不一样
  26. 第 25 行不一样
  27. 第 26 行不一样
  28. 第 27 行不一样
  29. 第 28 行不一样
  30. 第 29 行不一样
  31. 第 30 行不一样
  32. 第 31 行不一样
  33. 第 32 行不一样
  34. 第 33 行不一样
复制代码

  1. f2.seek(0)     #调节内循环文件指针到文档初始位置
  2.         for each_line_2 in f2:
复制代码

那我的这个错误在哪里 结果有点夸张
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 22:33:01 | 显示全部楼层
莫待无花空折枝 发表于 2020-5-24 22:21
那我的这个错误在哪里 结果有点夸张

错在不能用两个for循环  因为外面的for每次循环一次  里面就要for就要全部循环结束才到外面的下一次
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-24 22:35:22 | 显示全部楼层
Twilight6 发表于 2020-5-24 22:33
错在不能用两个for循环  因为外面的for每次循环一次  里面就要for就要全部循环结束才到外面的下一次

明白了  想当然了  大佬辛苦了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 22:41:24 | 显示全部楼层
莫待无花空折枝 发表于 2020-5-24 22:35
明白了  想当然了  大佬辛苦了

别叫大佬,我只是努力奋斗的咸鱼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 16:03:01 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 11:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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