2013-01-20 58 views
0

文本文件dummy.txt包含以下行:蟒蛇的ReadLine奇怪的行爲

Line 1 
Line 2 
Line 3 

下面的程序應該是追加的每一行線列表。

f1 = open('c:\Python33\dummy.txt') 
lines = [] 
for line in f1: 
    lines.append(f1.readline()) 
f1.close() 
print(lines) 

但它的輸出是:

[ '2行\ n', '']

當我使用IDLE,開該文件然後鍵入lines.append(f1.readline())三次然後打印行,我得到我想要的,即['Line 1\n', 'Line 2\n', 'Line 3\n']

該程序出了什麼問題?

回答

3

open將返回一個生成器,你正確地獲得下一行,但你得到一個循環兩次。所以這就是你在做什麼...你在循環中調用f1然後在追加f1被再次調用拉第二行。最後你在循環頭文件中調用它,再次調用第三行,然後當你在apped中再次調用它時,你會得到文件的結尾。這終止了發電機。

這樣做:

f1 = open('c:\Python33\dummy.txt') 
lines = [] 
for line in f1: 
    lines.append(line) 
f1.close() 
print(lines) 

lines = [line for line in f1] 

lines = f1.readlines() 
+0

我很感謝你,傑夫,你的解釋。我從Python文檔中沒有找到的是,「open()」生成了實際上是一個迭代器的內容,因此所有行都已經在f1中等待讀取。謝謝你,先生。 –