鱼C论坛

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

求问这是怎么回事?

[复制链接]
发表于 2017-10-26 10:56:38 | 显示全部楼层 |阅读模式

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

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

x
  1. #------比较两个文件----#

  2. def compare(f1, f2):
  3.     sum = 0
  4.     differ = []
  5.     length1 = len(f1.readlines())
  6.     length2 = len(f2.readlines())
  7.     if length1 > length2:
  8.         cycle_file = f1
  9.         readline_file = f2
  10.     else:
  11.         cycle_file = f2
  12.         readline_file = f1
  13.         
  14.     for line1 in cycle_file:
  15.         line2 = readline_file.readline()
  16.         sum += 1
  17.         if line1 != line2:
  18.             differ.append(sum)
  19.             
  20. file_name1 = input('请输入需要比较的头一个文件名:')
  21. file_name2 = input('请输入需要比较的另一个文件名:')
  22. f1 = open(file_name1)
  23. f2 = open(file_name2)

  24. compare(f1, f2)
  25. if len(differ) == 0:
  26.     print('两个文件一毛一样')
  27. else:
  28.     print('两个文件有【%d】处不同'%len(differ))
  29.     for each in differ:
  30.         print('第%d行不一样'%each)
  31. f1.close()
  32. f2.close()
  33.         
复制代码


程序运行之后出现:请输入需要比较的头一个文件名:something.txt

请输入需要比较的另一个文件名:something2.txt
两个文件一毛一样

求问各位大佬哪里出错了啊?
TIM截图20171026105535.png

TIM截图20171026105545.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-26 11:55:54 | 显示全部楼层
1,这个compare函数返回值。
2,在函数外differ没有定义是什么。
看你意思是两个文件要比较,是按行,来比较完全不同的。以下为我的逻辑:


  1. def compare(f1, f2):
  2.     lines_sum = 0
  3.     differ = []
  4.     fd1 = f1.readlines()
  5.     fd2 = f2.readlines()
  6.     length1 = len(fd1)
  7.     length2 = len(fd2)
  8.    
  9.     if length1 > length2:
  10.         len_min = length2
  11.     else:
  12.         len_min = length1

  13.     for i in range(len_min):
  14.         if fd1[i] != fd2[i]:
  15.             differ.append(i)
  16.             lines_sum += 1
  17.     for i in range(len_min, abs(length1-length2)+len_min):
  18.         lines_sum += 1
  19.         differ.append(i)

  20.     return differ


  21. file_name1 = 'C:\py\doc\prom\data.txt'
  22. file_name2 = 'C:\py\doc\prom\data_2.txt'
  23. f1 = open(file_name1)
  24. f2 = open(file_name2)

  25. differ = compare(f1, f2)
  26. if len(differ) == 0:
  27.     print('两个文件一毛一样')
  28. else:
  29.     print('两个文件有【%d】处不同' % len(differ))
  30.     for each in differ:
  31.         print('第%d行不一样' % each)
  32. f1.close()
  33. f2.close()

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

使用道具 举报

发表于 2017-10-26 13:40:41 | 显示全部楼层
请中函数定义的最后添加 return differ,否则differ的作用域仅仅在函数中
然后将第26行改为
differ = compare(f1, f2)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-27 10:33:29 | 显示全部楼层
BngThea 发表于 2017-10-26 13:40
请中函数定义的最后添加 return differ,否则differ的作用域仅仅在函数中
然后将第26行改为
differ = com ...

改了 运行还是不行 显示两个文件是一样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-27 11:24:37 | 显示全部楼层
你试试看用with 去打开文件。我发现如果直接用open去打开文件能都read()到数据,但是使用readlines()就读取不到数据了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-27 11:30:17 | 显示全部楼层
帮你修改了一下代码,看看能不能用了
  1. def compare(f1, f2):
  2.     lines_sum = 0
  3.     differ = []
  4.     fd1 = f1.readlines()
  5.     fd2 = f2.readlines()
  6.     length1 = len(fd1)
  7.     length2 = len(fd2)
  8.    
  9.     if length1 > length2:
  10.         len_min = length2
  11.     else:
  12.         len_min = length1

  13.     for i in range(len_min):
  14.         if fd1[i] != fd2[i]:
  15.             differ.append(i)
  16.             lines_sum += 1
  17.     for i in range(len_min, abs(length1-length2)+len_min):
  18.         lines_sum += 1
  19.         differ.append(i)

  20.     return differ


  21. file_name1 = r'd:\a.txt'
  22. file_name2 = r'd:\vhosts.txt'
  23. with open(file_name1,'r') as f1:
  24.     with open(file_name2,'r') as f2:
  25.         differ = compare(f1, f2)
  26.         if len(differ) == 0:
  27.             print('两个文件一毛一样')
  28.         else:
  29.             print('两个文件有【%d】处不同' % len(differ))
  30.         for each in differ:
  31.             print('第%d行不一样' % each)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-23 13:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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