python中出现意外的next()行为,似乎跳过了行

时间:2013-08-26 21:30:54

标签: python

这是我正在运行的代码:

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行。

2 个答案:

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

你现在明白为什么你的输出似乎是跳过线?

答案 1 :(得分:3)

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