python 文件单行循环读取的坑(一个程序中,文件默认只能按行循环读取一次,即使写到另一个循环里,它也只读取一次)

Posted mghhz816

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 文件单行循环读取的坑(一个程序中,文件默认只能按行循环读取一次,即使写到另一个循环里,它也只读取一次)相关的知识,希望对你有一定的参考价值。

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

 

                                                               

 

以上是关于python 文件单行循环读取的坑(一个程序中,文件默认只能按行循环读取一次,即使写到另一个循环里,它也只读取一次)的主要内容,如果未能解决你的问题,请参考以下文章

通过shell循环逐行读取两个txt文件,将两个不同文建内容拼成一个新文件txt

如何循环 python 读取一组 HTML 文件并转储到 JSON

如何使用 for 循环在 Matlab 中读取许多声音文件?

python python中循环的单行

在python3中,如果给定数组的大小,如何从单行输入中读取一个整数数组?

使用单行for循环python追加到一个空列表