|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是比较两个文件的不同,我没有思路就先跑一下小甲鱼的代码
小甲鱼的代码如下:
def file_compare(file1, file2):
f1 = open(file1)
f2 = open(file2)
count = 0 # 统计行数
differ = [] # 统计不一样的数量
for line1 in f1:
line2 = f2.readline()
count += 1
if line1 != line2:
differ.append(count)
f1.close()
f2.close()
return differ
file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')
differ = file_compare(file1, file2)
if len(differ) == 0:
print('两个文件完全一样!')
else:
print('两个文件共有【%d】处不同:' % len(differ))
for each in differ:
print('第 %d 行不一样' % each)
我在运行过程中突然想到,如果file2 比file1的行数多但是file2的前几行和file1还是完全相同会不会还是判断正确
然后我file1 的内容是
123
1234
12345
123456
file2的内容是
123
1234
12345
123456
1234567
12345678
运行结果为
两个文件共有【1】处不同:
第 4 行不一样
我的问题有两个
1 这个为何会报有1处不同,是第四行,但是第四行明明是一样的啊,而且按我的理解,应该报完全相同才对
2 如何修改这个程序啊,能不能提供给我一个思路
新手学python,感谢各位前辈指导,不胜感激!
本帖最后由 leon_xinxin 于 2020-4-7 20:34 编辑
我做这个题的时候也发现了这个问题,我的改进方向如下:
1.可以先比较两个文件的行数是否相同,相同转2.不同转3.
2.比较每行,然后输出
3.print('这两个文件行数不同'+哪个较长+长多少),然后将长的文件转成列表后再把后面多出的剪掉,再把两个文件放到2.进行比较
4.如果两个文件行数不同,但是前几行完全相同,则要返回print(‘这两个文件前面相同,后面不同’+不同之处)
代码很垃圾...就献丑了
- name1=input('请输入需要比较的第一个文件名:')
- name2=input('请输入需要比较的第二个文件名:')
- doku1=open(name1,'r')
- doku2=open(name2,'r')
- list1=list(doku1)
- list2=list(doku2)
- chang1=len(list1)
- chang2=len(list2)
- i=[]
- k=1
- if list1==list2:
- print('\n恭喜!这两个文件完全相同,(浪费了电脑资源哈哈哈)')
- else:
- print('\n这两个文件不同!')
- #增加功能:如果两个文件行数不同时,可以说明那个文件长,长多少
- if chang1>chang2:#如果1长,删去长的部分,然后再对比
- k=2
- print('文件1比文件2长,长',chang1-chang2,'行')
- print('较短的文件行数为:',chang1+1,'。在前',chang1+1,'行中:')
- list1=list1[:chang2]
- elif chang2>chang1:#如果2长,删去长的部分,然后再对比
- k=2
- print('文件2比文件1长,长',chang2-chang1,'行')
- print('较短的文件行数为:',chang2+1,'。在前',chang2+1,'行中:')
- list2=list2[:chang1]
- else:
- print('这两个文件行数一样')
- #摘取两个文件个各个行来进行对比,如果相同—》跳过;如果不同,记录行数和不同的点
- for each1 in list1:
- for each2 in list2:
- if each1 != each2 and list1.index(each1)==list2.index(each2):
- i.append(list1.index(each1))
- #汇报不同的行数和不同点
- if i!=[]:
- print('两个文件共有【',len(i),'】处不同')
- for each in i:
- print('第',int(each)+1,'行不一样')
- if i==[] and k==2:
- print('两个文件无差别,只有后面的信息有差别')
复制代码
|
|