【问题标题】:Python:Why readline() function doesn't work for file loopingPython:为什么 readline() 函数不适用于文件循环
【发布时间】:2015-08-24 19:57:03
【问题描述】:

我有以下代码:

#!/usr/bin/python

f = open('file','r')

for line in f:
    print line 
    print 'Next line ', f.readline()
f.close()

这给出了以下输出:

This is the first line

Next line
That was the first line
Next line

为什么 readline() 函数不能在循环内工作?它不应该打印文件的下一行吗?
我使用以下文件作为输入

This is the first line
That was the first line

【问题讨论】:

  • 您使用的是什么版本的 Python?当我运行你的代码时,我得到ValueError: Mixing iteration and read methods would lose data

标签: python


【解决方案1】:

您正在搞乱文件迭代的内部状态,因为出于优化原因,对文件的迭代将逐块读取它,并对其执行拆分。显式的readline()-call 会被这个混淆(或混淆迭代)。

要实现您想要的,请明确迭代器:

 import sys

 with open(sys.argv[1]) as inf:
     fit = iter(inf)
     for line in fit:
         print "current", line
         try:
             print "next", fit.next()
         except StopIteration:
             pass

【讨论】:

    【解决方案2】:

    使用这个

    for i, line in enumerate(f):
        if i == 0 :
             print line
        else:
             print 'NewLine: %s' % line
    

    【讨论】:

    • 这在语义上不等同于 OPs 代码(以他遇到的问题为模)。这不会使循环体中的两个连续行可用。
    • @deets 完全正确,应该使用 .next()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 2021-03-10
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多