我试图找到该问题的答案,但我想我无法真正查明问题的根源。如果您在其他地方已回答过此问题,那么请您抽出一点时间来解释我所缺少的内容。
基本上,我认为您可以执行以下操作:
ref = open(ref_file)
with ref:
for row in ref:
break
with ref:
for row in ref:
print(row)
由于我在第一个循环中使用了break
语句,所以我认为它会停止迭代器,暂停读取文件,然后在第二个循环中停下来。事实并非如此-相反,它向我抛出一个错误,说我正在尝试处理已关闭的文件。我进行了推理,得出的结论是,也许with
语句才是将迭代器推向EOF的原因。所以我尝试了这个:
with ref:
for row in ref:
break
for row in ref:
print(row)
这似乎按预期工作。太棒了所以,我接下来尝试的是:
with ref:
for i in range(0,10):
for row in vcf:
break
for row in vcf:
print(row)
从本质上讲,我期望的是打印交替的行,直到0,10
的范围用尽为止。相反,我打印文件的第二行,然后停止。
是否有更好的方法来防止迭代器到达EOF?我想念什么?我是否以某种方式脱离了with语句并错过了要点?
编辑:
好的,最后一个例子并不是我所遇到的问题的例证。
with ref:
for i in range(0,10):
for row in vcf:
break
for row in vcf:
print(row)
break
这可以按预期工作……这确实让我觉得我在我的真实代码中缺少了一些东西。对于阻止迭代器到达EOF的更好方法的评论,我仍将不胜感激。
答案 0 :(得分:2)
此处的缩进是不正确的:它读取一行,然后中断然后读取文件的其余部分,共10次:
with ref:
for i in range(0,10):
for row in vcf:
break
for row in vcf:
print(row)
请注意,您可以使用next
手动进行迭代,而不必脱离for
循环。更多pythonic:
for _ in range(10):
next(vcf,None)
# unindent here
for row in vcf:
print(row)
None
中的next
参数可确保即使文件少于10行,它也不会引发StopIteration
而是产生默认值(您忽略了)