莫待无花空折枝 发表于 2020-5-24 21:39:36

python 029 第一题

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

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

    f1.close()
    f2.close()
    return differ
               
               
file_name_1 = input("请输入需要比较的头一个文件名:")
file_name_2 = input("请输入需要比较的另一个文件名:")
compare_file(file_name_1,file_name_2)

length = len(differ)

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

    for each in differ:
      print("第%d行不一样"%each)

图片中出现的非法多字节序列的错误该怎么解决呢,不知道怎么来的

Twilight6 发表于 2020-5-24 21:41:15

open里面加上 encoding = 'utf-8'

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

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

    f1.close()
    f2.close()
    return differ
               
               
file_name_1 = input("请输入需要比较的头一个文件名:")
file_name_2 = input("请输入需要比较的另一个文件名:")
compare_file(file_name_1,file_name_2)

length = len(differ)

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

    for each in differ:
      print("第%d行不一样"%each)

qiuyouzhi 发表于 2020-5-24 21:41:33

open加个参数:
encoding="utf-8"

莫待无花空折枝 发表于 2020-5-24 21:41:44

是我文件有问题嘛?因为我运行小甲鱼的代码也是出现一样的错误

Twilight6 发表于 2020-5-24 21:43:00

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

不是 电脑不一样有的编码和文本的编码不能对应上就无法解码

莫待无花空折枝 发表于 2020-5-24 21:51:42

Twilight6 发表于 2020-5-24 21:41
open里面加上 encoding = 'utf-8'

请输入需要比较的头一个文件名:something.txt
请输入需要比较的另一个文件名:something2.txt
Traceback (most recent call last):
File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 22, in <module>
    compare_file(file_name_1,file_name_2)
File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 8, in compare_file
    for each_line_1 in f1:
File "D:\python3.7\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 0: invalid start byte
又出现这个错误 看都看不懂

Twilight6 发表于 2020-5-24 21:54:12

莫待无花空折枝 发表于 2020-5-24 21:51
又出现这个错误 看都看不懂

emmm那试试 把 utf-8改成 GB18030

永恒的蓝色梦想 发表于 2020-5-24 21:55:33

Twilight6 发表于 2020-5-24 21:54
emmm那试试 把 utf-8改成 GB18030

疯狂尝试{:10_256:}
话说你最佳和我一样多了{:10_327:}

Twilight6 发表于 2020-5-24 21:56:54

永恒的蓝色梦想 发表于 2020-5-24 21:55
疯狂尝试
话说你最佳和我一样多了

哈哈{:10_287:}

我想破 300 这个月 {:10_278:}

莫待无花空折枝 发表于 2020-5-24 22:04:02

Twilight6 发表于 2020-5-24 21:54
emmm那试试 把 utf-8改成 GB18030

请输入需要比较的头一个文件名:something.txt
请输入需要比较的另一个文件名:something2.txt
Traceback (most recent call last):
File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 20, in <module>
    differ = file_compare(file1, file2)
File "C:/Users/admin/Desktop/课后练习/008-比较用户输入的两个文件的不同.py", line 8, in file_compare
    line2 = f2.readline()
UnicodeDecodeError: 'gb18030' codec can't decode byte 0x80 in position 20: illegal multibyte sequence

Twilight6 发表于 2020-5-24 22:04:30

莫待无花空折枝 发表于 2020-5-24 22:04


哈哈 什么鬼怎么什么编码都不行...有毒

Twilight6 发表于 2020-5-24 22:05:06

本帖最后由 Twilight6 于 2020-5-25 07:22 编辑

莫待无花空折枝 发表于 2020-5-24 22:04


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

Twilight6 发表于 2020-5-24 22:07:45

莫待无花空折枝 发表于 2020-5-24 22:04


以 utf-8 编码保存看楼上

莫待无花空折枝 发表于 2020-5-24 22:21:49

Twilight6 发表于 2020-5-24 22:05
你重新创建txt文件时候选择以 utf-8 编码保存



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

f2.seek(0)   #调节内循环文件指针到文档初始位置
      for each_line_2 in f2:
那我的这个错误在哪里 结果有点夸张

Twilight6 发表于 2020-5-24 22:33:01

莫待无花空折枝 发表于 2020-5-24 22:21
那我的这个错误在哪里 结果有点夸张

错在不能用两个for循环因为外面的for每次循环一次里面就要for就要全部循环结束才到外面的下一次

莫待无花空折枝 发表于 2020-5-24 22:35:22

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

明白了想当然了大佬辛苦了

Twilight6 发表于 2020-5-24 22:41:24

莫待无花空折枝 发表于 2020-5-24 22:35
明白了想当然了大佬辛苦了

{:10_297:}别叫大佬,我只是努力奋斗的咸鱼

zwhe 发表于 2020-5-26 16:03:01

{:10_257:}
页: [1]
查看完整版本: python 029 第一题