python readline 奇怪的行为

Joh*_*ork 0 python readline

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

Line 1
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud)

以下程序应该将每一行附加到行列表中。

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

但它的输出是:

['第 2 行\n', '']

当我使用 IDLE 时,打开文件然后键入lines.append(f1.readline())三遍然后打印行,我得到了我想要的,即['Line 1\n', 'Line 2\n', 'Line 3\n'].

程序出了什么问题?

Jef*_*eff 5

open将返回一个生成器,您可以正确获取下一行,但在一个循环中您将获得两次。所以这就是你正在做的事情......你f1在循环中调用,然后在追加中f1再次调用拉第二行。最后你在循环头中再次调用它,调用第三行,然后当你在apped中再次调用它时,你将得到文件结尾。这结束了发电机。

做这个:

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

或者

lines = [line for line in f1]
Run Code Online (Sandbox Code Playgroud)

或者

lines = f1.readlines()
Run Code Online (Sandbox Code Playgroud)