博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 文件单行循环读取的坑(一个程序中,文件默认只能按行循环读取一次,即使写到另一个循环里,它也只读取一次)...
阅读量:4687 次
发布时间:2019-06-09

本文共 1025 字,大约阅读时间需要 3 分钟。

本来写了一个程序,想获取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()

 

                                                               

 

转载于:https://www.cnblogs.com/mghhzAnne/p/10368918.html

你可能感兴趣的文章
测试思想-集成测试 关于接口测试 Part 2
查看>>
windows下mysql密码忘了怎么办?【转】
查看>>
php生成器使用总结
查看>>
T-SQL中的indexof函数
查看>>
javascript基础之数组(Array)对象
查看>>
mysql DML DDL DCL
查看>>
RAMPS1.4 3d打印控制板接线与测试1
查看>>
python with语句中的变量有作用域吗?
查看>>
24@Servlet_day03
查看>>
初级ant的学习
查看>>
redis数据结构--String
查看>>
POJ 3279 Fliptile (二进制枚举)
查看>>
memcached 细究(三)
查看>>
future
查看>>
关于main函数传参数的问题
查看>>
getTickCount()函数 VS GetTickCount()函数
查看>>
嵌入式jetty
查看>>
2017~回顾分享
查看>>
let const var的区别与作用
查看>>
计算出线在屏幕内的最长坐标
查看>>