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()

 

                                                               

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM