本来写了一个程序,想获取a文件中有,但是b文件中没有的行;
想到的方法是:1.一行一行提取a文件中数据,然后用a文件中的每一行与b文件中的每一行比较,
2.如果找到相同行就继续查找a中的下一行,如果找不到,就把这行保存起来,就是要找的一行
程序写成如下:
f = open("file/a.txt","r",newline='\n')
ff= open ("file/aa.txt","r",newline='\n')
new=open ("file/a1.txt",'w')
for line in f:
flag= 0
for line1 in ff:
if line == line1:
flag=1
break
else: continue
if flag ==0:
new.write(line)
f.close()
ff.close()
new.close()
然后就运行,结果就发现了一个奇怪的现象:如果a中的最后几行在b中找不到,那么结果是对的
如果a中的第一行,或者中间行在b中找不到,那结果就是错的
找错:我每一行都打了断点,最后发现,第一个循环内的文件遍历只遍历一次:即ff对象只遍历一次;无论外围循环是否重新开始,循环内的文件遍历只走一次
所以如果第一行找不到,内部循环会将行保留在ff文件的最后一行,而不是重新开始,所以出错
解决:在内部的循环层外,加ff.seek(0),将指针指回文件头即可
f = open("file/a.txt","r",newline='\n')
ff= open ("file/aa.txt","r",newline='\n')
new=open ("file/a1.txt",'w')
for line in f:
flag= 0
ff.seek(0)
for line1 in ff:
if line == line1:
flag=1
break
else: continue
if flag ==0:
new.write(line)
f.close()
ff.close()
new.close()