1

这是我正在运行的代码:

with open('test.txt','r') as fin:
    for i,line in enumerate(fin):
        print i
        print fin.next()

其中“test.txt”是:

    5
    9 6
    4 6 8
    0 7 1 5 

我得到的输出是:

0 
9 6 

1
0 7 1 5

我对为什么跳过“4 6 8”行感到困惑。我希望在第一次迭代时打印第 2 行,在第二次迭代时打印第 3 行,在第三次迭代时打印第 4 行。

相反,我在第二次迭代中得到第 4 行。

4

2 回答 2

4

这是因为当您这样做时for i,line in enumerate(fin),对的调用enumerate已经fin.next()在后台调用。因此,当您fin.next稍后手动调用时,您会在已处理的行之后获得下一行。这就是为什么您似乎跳过了行。

如果您想观察更多这种行为,请查看以下代码段产生的输出:

L1 = [1,2,3,4]
L2 = ['a', 'b', 'c', 'd']
print zip(L1, L2)

输出是:

[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')] 

将其与以下代码段进行比较:

with open('test.txt','r') as fin:
    print zip(fin, fin)

输出在哪里:

[('1 2 3 4\n' , 'a b c d \n')]

您现在明白为什么您的输出似乎跳行了吗?

于 2013-08-26T21:34:10.313 回答
3

fin.next()正在迭代fin文件对象,将光标移动到下一行,所以当你回到 while 循环的顶部时,你已经“跳过”了这一行。你想打印line,不是fin.next()

于 2013-08-26T21:34:39.280 回答