鱼C论坛

 找回密码
 立即注册
查看: 1517|回复: 3

[已解决]求解答

[复制链接]
发表于 2022-5-20 17:49:07 | 显示全部楼层 |阅读模式

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

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

x
比较两个文件的不同之处

n = 0   #行数
count = []  #不同的数量
file1 = input('请输入需要比较的第一个文件名:')
file2 = input('请输入需要比较的第二个文件名:')
f1 = open(file1+'.txt',encoding = 'utf-8')
f2 = open(file2+'.txt',encoding = 'utf-8')
for line1 in f1:
    line2 = f2.readline()
    n += 1
    if line1 != line2:
        count.append(n)


if len(count) == 0:
    print('两个文件完全一样')
else:
    print('一共%d处不同'%len(count))
    for each in count:
        print('第%d行不同'%each)
f1.close()
f2.close()


蓝色部分有人能给标注以下嘛,还有,如果想打印出不同的那几行,该怎么改
最佳答案
2022-5-20 18:18:35
[b]
  1. # for 循环遍历 f1 文件对象,也是按行遍历,所以每循环一次,就从 f1 文件对象中读取一行内容
  2. for line1 in f1:
  3.    
  4.     # 使用 readline() 函数从 f2 文件对象中读取一行内容
  5.     line2 = f2.readline()
  6.    
  7.     # n 用于记录行数,for 循环每执行一次,那么就有一行数据被读取,即行数 +1
  8.     n += 1
  9.    
  10.     # 判断两个文件对象此行内容是否相同
  11.     if line1 != line2:
  12.         
  13.         # 若不相同,则将 n 记录下来,即添加如 count 列表中
  14.         count.append(n)
复制代码

如果想打印出不同的那几行,该怎么改


不知道是否是这个意思,参考代码:

  1. n = 0
  2. count = []
  3. linetext = []
  4. file1 = input('请输入需要比较的第一个文件名:')
  5. file2 = input('请输入需要比较的第二个文件名:')
  6. f1 = open(file1+'.txt',encoding = 'utf-8')
  7. f2 = open(file2+'.txt',encoding = 'utf-8')
  8. for line1 in f1:
  9.     line2 = f2.readline()
  10.     n += 1
  11.     if line1 != line2:
  12.         count.append(n)
  13.         linetext.append([line1, line2])


  14. if len(count) == 0:
  15.     print('两个文件完全一样')
  16. else:
  17.     print('一共%d处不同'%len(count))
  18.     for i in range(len(count)):
  19.         print('第%d行不同' % count[i])
  20.         print('\t%s文件第%d行内容为:%s' % (file1, count[i], linetext[i][0]))
  21.         print('\t%s文件第%d行内容为:%s' % (file2, count[i], linetext[i][1]))
  22. f1.close()
  23. f2.close()
复制代码


[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-5-20 18:18:35 | 显示全部楼层    本楼为最佳答案   
[b]
  1. # for 循环遍历 f1 文件对象,也是按行遍历,所以每循环一次,就从 f1 文件对象中读取一行内容
  2. for line1 in f1:
  3.    
  4.     # 使用 readline() 函数从 f2 文件对象中读取一行内容
  5.     line2 = f2.readline()
  6.    
  7.     # n 用于记录行数,for 循环每执行一次,那么就有一行数据被读取,即行数 +1
  8.     n += 1
  9.    
  10.     # 判断两个文件对象此行内容是否相同
  11.     if line1 != line2:
  12.         
  13.         # 若不相同,则将 n 记录下来,即添加如 count 列表中
  14.         count.append(n)
复制代码

如果想打印出不同的那几行,该怎么改


不知道是否是这个意思,参考代码:

  1. n = 0
  2. count = []
  3. linetext = []
  4. file1 = input('请输入需要比较的第一个文件名:')
  5. file2 = input('请输入需要比较的第二个文件名:')
  6. f1 = open(file1+'.txt',encoding = 'utf-8')
  7. f2 = open(file2+'.txt',encoding = 'utf-8')
  8. for line1 in f1:
  9.     line2 = f2.readline()
  10.     n += 1
  11.     if line1 != line2:
  12.         count.append(n)
  13.         linetext.append([line1, line2])


  14. if len(count) == 0:
  15.     print('两个文件完全一样')
  16. else:
  17.     print('一共%d处不同'%len(count))
  18.     for i in range(len(count)):
  19.         print('第%d行不同' % count[i])
  20.         print('\t%s文件第%d行内容为:%s' % (file1, count[i], linetext[i][0]))
  21.         print('\t%s文件第%d行内容为:%s' % (file2, count[i], linetext[i][1]))
  22. f1.close()
  23. f2.close()
复制代码


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

使用道具 举报

发表于 2022-5-20 19:47:16 | 显示全部楼层
Twilight6 发表于 2022-5-20 18:18
不知道是否是这个意思,参考代码:

大佬这个代码感觉有点小问题, 只要有一个文本多了一行或者少了一行, 从这一行开始就都不一样了
我的建议是分别读取, 放进两个列表 (列表里面放字典, 行号和每行内容), 用成员操作符去判断内容是否一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 20:17:57 | 显示全部楼层
白two 发表于 2022-5-20 19:47
大佬这个代码感觉有点小问题, 只要有一个文本多了一行或者少了一行, 从这一行开始就都不一样了
我的建议 ...




确实,这代码前提是文件行数相同,只能对应文件行上的差异

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 04:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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