Python 在一个文件中循环,同时使用'file.readline();“好的”;练习?
我已经编写了一段代码,其中在遍历文件行的Python 在一个文件中循环,同时使用'file.readline();“好的”;练习?,python,file,python-3.x,parsing,Python,File,Python 3.x,Parsing,我已经编写了一段代码,其中在遍历文件行的for循环中,我有一些file.readline()语句。这对我来说似乎是个很大的问题,尽管脚本似乎工作得很好。为了演示,假设文件中包含以下内容: ……等等 头球标志着重要的东西即将到来 重要资料第一行 重要资料第2行 重要资料第三行 ……等等 此标题和重要内容行块多次出现,因此我的脚本看起来像这样: with open(file, 'r') as fi: for line in fi: if header in line:
for
循环中,我有一些file.readline()
语句。这对我来说似乎是个很大的问题,尽管脚本似乎工作得很好。为了演示,假设文件中包含以下内容:
……等等
头球标志着重要的东西即将到来
重要资料第一行
重要资料第2行
重要资料第三行
……等等
此标题和重要内容行块多次出现,因此我的脚本看起来像这样:
with open(file, 'r') as fi:
for line in fi:
if header in line:
a = fi.readline()
b = fi.readline()
c = fi.readline()
continue
fi中的行的和fi.readline()
都使用相同的对象(文件),因此在继续之后,行的下一个值将是4行,因为readline()调用了3行
正如我所说的,上述方法是可行的,但我不是“如果可行,就不是愚蠢”运动的大力支持者
另一方面,另一种方法是:
found_header = True
with open(file, 'r') as fi:
for line in fi:
if header in line:
new_stuff_inc = []
found_header = True
elif found_header:
new_stuff_inc.append(line)
if len(new_stuff_inc) == 3:
found_header = False
这似乎更安全,因为文件一次只给一张嘴喂食(只有行..
会消耗它),但它看起来非常复杂
那么,我们应该如何做这样的事情呢?混合for
和readline()
这很有趣。在我的机器中,未引发任何ValueError
。。顺便说一句,我使用的是Python3.5。因为Python3被标记了,所以我会将“it not work”(它不工作)的语气调低一点。它不再引发错误的事实表明,这可能是python开发人员想要朝的方向。是否可以调用next(fi)
?文件。在for
循环中使用next时,Python2中的一个圆滑的家伙使用了一个隐藏的缓冲区来提高性能。这在Python3中不会发生。如果您愿意,您可以将它们混合在一起,而不会产生我所知道的任何副作用(它们都作用于相同的底层文件迭代器)。这看起来很奇怪。@JimFasarakis Hilliard执行此操作时,循环中不能出现StopIteration
异常吗?我同意您必须在for循环和while之间进行选择。@Jean-Françoisfare否否,它在EOF上返回一个空字符串。
Traceback (most recent call last):
File "<module1>", line 3, in <module>
ValueError: Mixing iteration and read methods would lose data
with open(file, 'r') as fi:
while True:
line = fi.readline()
if not line: # end of file
break
if header in line:
a = fi.readline()
b = fi.readline()
c = fi.readline()
continue