2016-02-18 71 views
1

今天我試圖學習和嘗試Python,並試圖打開一個文本文件,從它讀取行,然後在第二個文本文件中寫入這些行。之後,我嘗試將兩個文件中的行加載到列表中,並在控制檯中打印這些列表。下面是實驗代碼:Python:爲什麼我的循環在某個文本文件中讀取空行,雖然文件不是空的?

f = open('D:\\origFile.txt', 'r') 
f2 = open('D:\\copyFile.txt', 'w') 

for line in f: 
    f2.write(line.rstrip() + ' ') 
f2.close() 

s="" 
for linez in f: 
    s += linez 
    print (s) 

s2="" 
f2 = open('D:\\copyFile.txt', 'r+') 
reading = f2.readlines() 
print (reading) 

for linex in f2: 
    s2 += linex 
    print (linex) 

list1=s.split() 
list2=s2.split() 
print(list1) 
print(list2) 
f.close() 
f2.close() 

的代碼按預期工作,只有當我刪除或評論這一部分:

f2 = open('D:\\copyFile.txt', 'w') 

for line in f: 
    f2.write(line.rstrip() + ' ') 
f2.close() 

雖然我已經寫f1的內容之後關閉f2文件。那麼爲什麼它會影響代碼中其餘的文件操作呢?它又如何影響f1?如在中,最後的列表既不是來自f1也不是f2的文本。

編輯1:在我的問題中,我已經試圖關閉第二個文件,認爲這將是我的問題的原因,而不是循環本身;而另一個問題甚至沒有回答我的問題的答案。儘管答案有些相同,但在另一個問題中的答案並未顯示如何重複使用文件的內容,而無需使用f.seek(0)來重置迭代器,以便能夠像我上面的代碼一樣使用多個循環中的內容。

+1

你做'了線F'右後'在F' linez,但你已經閱讀了f中的所有行。使用新的變量名稱不會倒帶文件。 – nsilent22

+0

所以在Python中,循環不倒帶?在嘗試再次循環之前,我必須將指針倒回到文件的起始位置? – terasky

+1

這不是指針。將它視爲一個流,從中將數據「喂」到你的「line」或「linez」變量中。如果你清空流,你將不會獲得更多數據。做'f.seek(0)'回捲到流的開頭。 – nsilent22

回答

0

你通過f內容試圖循環兩次:

for line in f: 

for linez in f: 

...你不能這樣做的。第二個循環將立即退出,因爲您已經閱讀了所有的行;有沒有留下來閱讀。

如果你想通過他們幾次來保存文件和循環線,使用這樣的:

all_lines = f.readlines() 
+0

這是關於當迭代器到達文件末尾的時候,我到達了第二個循環:「for linez in f:'..明白了,感謝您的幫助。 – terasky

相關問題