为什么这段代码(Python)只返回一行?

为什么这段代码(Python)只返回一行?,python,file,Python,File,我最近开始编程,我想对一个文件进行排序,但最后,这段代码只返回一行,即使文本文件有65行 f = open(".\\test.txt") g, u = [], [] a = 0 for i, line in enumerate(f): a += 1 if i%2 == 0: g.append(f.readlines()[i]) print(i), elif i%2 == 1: u.append(f.readlines()

我最近开始编程,我想对一个文件进行排序,但最后,这段代码只返回一行,即使文本文件有65行

f = open(".\\test.txt")
g, u = [], []
a = 0


for i, line in enumerate(f):
    a += 1
    if i%2 == 0:
        g.append(f.readlines()[i])
        print(i),
    elif i%2 == 1:
        u.append(f.readlines()[i])
        print(i),


print(u),
print(g)
你必须这样做

lines = f.readlines()
for i, line in enumerate(lines):
    a += 1
    if i%2 == 0:
        g.append(lines[i])
        print(i),
    elif i%2 == 1:
        u.append(lines[i])
        print(i),
open(filename)
为您提供文件行的迭代器。此迭代器将在读取所有行一次后耗尽,因此,在第一行之后对
readlines
的任何后续调用都将为您提供一个空列表

演示:


您的
for
循环开始逐行读取文件。但是它的内容会在一个
readlines
调用中读取文件的其余部分;在那之后,就没有什么可读的了!因此,由于只保留了
readlines()
读取的行中的一行,因此您在
line
中得到了第一行,在
g
中得到了第二行

您不能像以前那样使用
readlines()
。请看一看,您当然可以将
append(f.readlines()[i])
替换为
append(line)
…@RandomDavis,非常感谢。如果我这样做,我会遇到一个值错误:太多值无法解压缩(预期为2)抱歉,输入错误。固定的
>>> with open('testfile.txt') as f:
...     a = f.readlines()
...     b = f.readlines()
...     a
...     b
... 
['hello\n', 'stack\n', 'overflow\n']
[]