2017-07-10 70 views
0

我期望這段代碼創建list_of_rows2 list,然後運行for循環。 for循環怎麼沒有被執行?這只是如何open的作品?爲什麼不在這裏執行for循環?

infile = r"D:\temp.txt" 

with open(infile) as file2: 

    list_of_rows2 = [x.split() for x in file2] 

    for x in file2: 
     print x 
+0

你到底想用文件做什麼? –

+0

沒什麼,我只是不明白爲什麼這沒有按照我的預期工作。 – fpolig01

回答

5

是的,這就是open的工作原理。它將一個迭代器返回給文件對象。你只能迭代它直到耗盡。

列表理解中的第一次迭代耗盡了文件迭代器,因此當您再次審閱文件迭代器時,就沒有剩下的迭代。

這樣做的好處是不會將整個文件(可能有時會很大)一次全部加載到內存中,使內存中的程序窒息。但是,您可以(如果需要)通過調用文件對象的readlines方法將文件加載到內存:

with open(infile) as file2: 
    file2 = file2.readlines() # or list(file2) 
    list_of_rows2 = [x.split() for x in file2] 

    for x in file2: 
     print x 

另一種方法是通過調用file2.seek(0)尋求該文件的起始位置,迭代前它再次。

+0

很好的答案,清除它。謝謝 – fpolig01

+1

如果你的情況更好,你也可以通過調用'file2.seek(0)'來重置迭代器。 – Collin

+0

@Collin是的,那是另一個不錯的選擇。我怎麼錯過了。 –