python readline奇怪的行为

时间:2013-01-20 17:16:03

标签: python readline

文本文件dummy.txt包含以下行:

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']

该计划出了什么问题?

1 个答案:

答案 0 :(得分: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()