我期望這段代碼創建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
我期望這段代碼創建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
是的,這就是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)
尋求該文件的起始位置,迭代前它再次。
你到底想用文件做什麼? –
沒什麼,我只是不明白爲什麼這沒有按照我的預期工作。 – fpolig01