【发布时间】:2015-04-26 19:35:49
【问题描述】:
我有这个文件,我正在用 Python 2.7 解析
a
b
我这样解析:
f = open("file.txt", "r")
for l in f:
if l == "a\n":
break
# this causes an error
print f.readline()
这会导致:
ValueError: Mixing iteration and read methods would lose data
为什么 Python 会抛出这个错误?我想读取一个文件,直到在循环中满足条件,然后通过调用readline() 读取结果。不明白为什么会出现错误,因为 readline() 调用在引用文件句柄的循环之外。
【问题讨论】:
-
在 python3 中,如果你将 print 更改为 print(),它就可以工作
-
@MartinB 我正在使用 python 2.7
-
因为这两个操作都会操纵文件的当前位置,这可能会导致数据丢失,如错误消息所示。 Python 无法知道您在
r.readline()语句之后不会再次使用迭代器。要么自己读取文件并将其分成几行,要么使用for line in f迭代器,但不能同时使用两者。对于您的情况,您可以简单地在最后执行print next(f)来推进迭代器,而不是使用readline()。 -
@LukasGraf:为什么
next不同? next 和for line in f都使用迭代器,不是吗?我不明白区别 -
@lgd 确切地说,
next(iterator)正是for循环在每次迭代中为您所做的事情。所以要么使用迭代器,或read() / readline()方法,但不要混合使用它们。
标签: python io file-handling