鱼C论坛

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

[已解决]python 029 第一题

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

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

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

x
#比较用户输入的两个文件
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)
图片中出现的非法多字节序列的错误该怎么解决呢,不知道怎么来的
最佳答案
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)
QQ图片20200524213425.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2020-5-24 21:41:33 | 显示全部楼层
open加个参数:
encoding="utf-8"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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


不是 电脑不一样  有的编码和文本的编码不能对应上就无法解码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
又出现这个错误 看都看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmm  那试试 把 utf-8  改成 GB18030
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

评分

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

查看全部评分

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

使用道具 举报

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

哈哈  

我想破 300 这个月

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

使用道具 举报

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

哈哈 什么鬼怎么什么编码都不行...有毒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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


记事本.png
123、.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

以 utf-8 编码保存  看楼上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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:
那我的这个错误在哪里 结果有点夸张
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

错在不能用两个for循环  因为外面的for每次循环一次  里面就要for就要全部循环结束才到外面的下一次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

明白了  想当然了  大佬辛苦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

别叫大佬,我只是努力奋斗的咸鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 16:03:01 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 04:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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