这是我正在运行的代码:
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行。
答案 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()
。