课后作业第29讲
问题:编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置这是我写的代码,但是执行报错了,希望可以指点一下,万分感谢!!!!
allcount = 0
count = 0
def find_out(f1,f2):
for each_line1 in f1:
for each_line2 in f2:
allcount += 1
if each_line1 == each_line2 :
continue
else :
count += 1
print('第 %d 行不一样' % allcount)
print('两个文件中共有【%d】处不同' % count)
f1.close()
f2.close()
file1 = input('请输入需要比较的第一个文件名字: ')
f1 = open('E:/py/小甲鱼课后作业/029/file1')
file2 = input('请输入需要比较的第一个文件名字: ')
f2 = open('E:/py/小甲鱼课后作业/029/file2')
find_out(f1,f2)
我先说你代码可能会发生的问题
1、open()打开文件最好设置好encoding的参数,容易报错
2、在两个文件比较时,你用的是嵌套循环是有问题的,因为f1的每一行都会遍历f2的每一行
我的想法(open参数不说了)
1、先将其列表化,用一个变量的值去遍历两个列表去找到它们不相等的行数
2、假设f1和f2并不相等(尤其是行数),那就遍历完函数少的那个文件就好了,先找到它们不等的行数,然后加上它们差
本帖最后由 大马强 于 2021-10-9 22:15 编辑
def find_out(f1, f2):
count = 0# 接收两个文件行数最小的一个
ff1 = list(f1)
ff2 = list(f2)
len_ = len(ff1)
if len(ff2) < len(ff1):
len_ = len(ff2)
for i in range(len_):
if ff1 != ff2:
count += 1
print('第 %d 行不一样' % i)
count += abs(len(ff1) - len(ff2))# 加上两者差绝对值
f1.close()
f2.close()
# for each_line1 in f1:
# for each_line2 in f2:
# allcount += 1
# if each_line1 == each_line2:
# continue
# else:
# count += 1
# print('第 %d 行不一样' % allcount)
print('两个文件中共有【%d】处不同' % count)
file1 = input('请输入需要比较的第一个文件名字: ')
f1 = open('./1.txt', encoding="utf-8")
file2 = input('请输入需要比较的第一个文件名字: ')
f2 = open('2.txt', encoding="utf-8")
find_out(f1, f2)
页:
[1]