鱼C论坛

 找回密码
 立即注册
查看: 1609|回复: 5

[已解决]【第29讲课后作业】假如两个文件行数不一致?

[复制链接]
发表于 2020-2-20 21:14:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 xiaofan1228 于 2020-2-20 21:18 编辑

小甲鱼的答案

  1. def file_compare(file1, file2):
  2.     f1 = open(file1)
  3.     f2 = open(file2)
  4.     count = 0 # 统计行数
  5.     differ = [] # 统计不一样的数量

  6.     for line1 in f1:
  7.         line2 = f2.readline()
  8.         count += 1
  9.         if line1 != line2:
  10.             differ.append(count)

  11.     f1.close()
  12.     f2.close()
  13.     return differ

  14. file1 = input('请输入需要比较的头一个文件名:')
  15. file2 = input('请输入需要比较的另一个文件名:')

  16. differ = file_compare(file1, file2)

  17. if len(differ) == 0:
  18.     print('两个文件完全一样!')
  19. else:
  20.     print('两个文件共有【%d】处不同:' % len(differ))
  21.     for each in differ:
  22.         print('第 %d 行不一样' % each)
复制代码


这是我写的
  1. def compare(file1, file2):
  2.     diff = []
  3.     count = 0
  4.     swich = "多"
  5.     a = file1.readlines()
  6.     b = file2.readlines()
  7.    
  8.     if len(a) < len(b):
  9.         length = len(a)
  10.         switch = "少"
  11.         delta = len(b) - len(a)
  12.     else:
  13.         length = len(a)
  14.         delta = len(a) - len(b)

  15.     for each in range(length):
  16.         if a[each] == b[each]:
  17.             continue
  18.         else:
  19.             diff.append(each+1)
  20.             count += 1

  21.     file1.close()
  22.     file2.close()
  23.    
  24.     if count == 0 and delta == 0:
  25.         print("两个文件完全相同")
  26.     else:      
  27.         print("共有%d处不同:" %count)
  28.         print("第一个文件比第二个文件%s%d行"%(switch,delta))
  29.         for each in diff:
  30.             print("其中第%d行不同"  %each)
  31.             

  32. file1 = open("E:\\Python_homework\\29\\123.txt", encoding = 'UTF-8')
  33. file2 = open("E:\\Python_homework\\29\\456.txt", encoding = 'UTF-8')

  34. compare(file1, file2)
复制代码


问题:
小甲鱼的答案没有考虑两个文档行数不一致的情况,
  1.     for line1 in f1:
  2.         line2 = f2.readline()
  3.         count += 1
  4.         if line1 != line2:
  5.             differ.append(count)
复制代码

这里假如f1比f2要少几行,那么后面都不会出现“不同了”

我是用的readlines()先把txt转化为列表然后比较的,如果length直接取两者之中最长的,会出IndexError: list index out of range,
所以在这种情况下,我增加了
  1. print("第一个文件比第二个文件%s%d行"%(switch,delta))
复制代码

因为我不知道怎么样能够在行数不一致的时候依然可以做出比较判断,
求指导
最佳答案
2020-2-21 09:12:33
xiaofan1228 发表于 2020-2-21 00:52
大佬,思路真牛逼!!!  我刚试了一下在enumerate那一行报错了。。。没接触过过这个函数,不知道怎么改 ...

抱歉,写好了,没有运行调试,有不少错误
  1. def file_compare():
  2.     f1 = open("f:/py/1.txt", encoding = 'UTF-8')
  3.     f2 = open("f:/py/2.txt", encoding = 'UTF-8')
  4.     a = f1.readlines()
  5.     b = f2.readlines()
  6.     differ = [] # 统计不一样的数量
  7.     delta = len(a) - len(b)
  8.     switch = "多" if delta > 0 else "少"

  9.     for n, (i, j) in enumerate(zip(a, b)):
  10.         if i != j:
  11.             differ.append(n + 1)

  12.     f1.close()
  13.     f2.close()
  14.    
  15.     if differ == [] and delta == 0:
  16.         print("两个文件完全相同")
  17.     else:
  18.         if delta:
  19.             print("第一个文件比第二个文件%s%d行"%(switch,abs(delta)))
  20.         if  differ:   
  21.             print('两个文件共有【%d】处不同:' % len(differ))
  22.             for each in differ:
  23.                 print('第 %d 行不一样' % each)
  24.             



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

使用道具 举报

发表于 2020-2-20 21:17:22 | 显示全部楼层
这样试试:

  1. def compare(file1, file2):
  2.     diff = []
  3.     count = 0
  4.     switch = "多"
  5.     a = file1.readlines()
  6.     b = file2.readlines()

  7.     if len(a) < len(b):
  8.         length = len(a)
  9.         switch = "少"
  10.         delta = len(b) - len(a)
  11.     else:
  12.         length = len(a)
  13.         delta = len(a) - len(b)

  14.     for each in range(length):
  15.         if a[each] == b[each]:
  16.             continue
  17.         else:
  18.             diff.append(each + 1)
  19.             count += 1

  20.     file1.close()
  21.     file2.close()

  22.     if count == 0 and delta == 0:
  23.         print("两个文件完全相同")
  24.     else:
  25.         print("共有%d处不同:" % count)
  26.         print("第一个文件比第二个文件%s%d行" % (switch, delta))
  27.         for each in diff:
  28.             print("其中第%d行不同" % each)


  29. file1 = open("E:\\Python_homework\\29\\123.txt", encoding='UTF-8')
  30. file2 = open("E:\\Python_homework\\29\\456.txt", encoding='UTF-8')

  31. compare(file1, file2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-20 21:56:55 | 显示全部楼层
  1. def file_compare(file1, file2):
  2.     f1 = open(file1)
  3.     f2 = open(file2)
  4.     differ = [] # 统计不一样的数量
  5.     delta = len(a) - len(b)
  6.     switch = "多" if delta > 0 else "少"
  7.     a = file1.readlines()
  8.     b = file2.readlines()
  9.     for n, (i, j in enumerate(zip(a, b):
  10.         if i != j:
  11.             differ.append(n + 1)

  12.     file1.close()
  13.     file2.close()
  14.    
  15.     if differ = [] and delta == 0:
  16.         print("两个文件完全相同")
  17.     else:
  18.         if delta:
  19.             print("第一个文件比第二个文件%s%d行"%(switch,abs(delta)))
  20.         if  differ:   
  21.             print('两个文件共有【%d】处不同:' % len(differ))
  22.             for each in differ:
  23.                 print('第 %d 行不一样' % each)
  24.             

  25. file1 = open("E:\\Python_homework\\29\\123.txt", encoding = 'UTF-8')
  26. file2 = open("E:\\Python_homework\\29\\456.txt", encoding = 'UTF-8')

  27. compare(file1, file2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-21 00:52:15 | 显示全部楼层

大佬,思路真牛逼!!!  我刚试了一下在enumerate那一行报错了。。。没接触过过这个函数,不知道怎么改。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 09:12:33 | 显示全部楼层    本楼为最佳答案   
xiaofan1228 发表于 2020-2-21 00:52
大佬,思路真牛逼!!!  我刚试了一下在enumerate那一行报错了。。。没接触过过这个函数,不知道怎么改 ...

抱歉,写好了,没有运行调试,有不少错误
  1. def file_compare():
  2.     f1 = open("f:/py/1.txt", encoding = 'UTF-8')
  3.     f2 = open("f:/py/2.txt", encoding = 'UTF-8')
  4.     a = f1.readlines()
  5.     b = f2.readlines()
  6.     differ = [] # 统计不一样的数量
  7.     delta = len(a) - len(b)
  8.     switch = "多" if delta > 0 else "少"

  9.     for n, (i, j) in enumerate(zip(a, b)):
  10.         if i != j:
  11.             differ.append(n + 1)

  12.     f1.close()
  13.     f2.close()
  14.    
  15.     if differ == [] and delta == 0:
  16.         print("两个文件完全相同")
  17.     else:
  18.         if delta:
  19.             print("第一个文件比第二个文件%s%d行"%(switch,abs(delta)))
  20.         if  differ:   
  21.             print('两个文件共有【%d】处不同:' % len(differ))
  22.             for each in differ:
  23.                 print('第 %d 行不一样' % each)
  24.             



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

使用道具 举报

 楼主| 发表于 2020-2-21 18:30:51 | 显示全部楼层
冬雪雪冬 发表于 2020-2-21 09:12
抱歉,写好了,没有运行调试,有不少错误

太强了,压根没想到differ本身也可以加上len()作为计数来用,学习了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 17:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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