gpt4 book ai didi

python - 是否可以阻止迭代器到达文件末尾?

转载 作者:行者123 更新时间:2023-12-01 00:47:27 25 4
gpt4 key购买 nike

我试图找到这个问题的答案,但我想我无法真正找出问题的根源。如果这个问题已在其他地方得到解答,如果您能花点时间解释我所缺少的内容,我将不胜感激。

基本上,我认为你可以做这样的事情:

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 的更好方法的评论。

最佳答案

此处的缩进不正确:它读取一行然后中断,然后读取文件的其余部分,共 10 次:

with ref:
for i in range(0,10):
for row in vcf:
break

for row in vcf:
print(row)

请注意,您可以使用 next 手动迭代,而不是打破 for 循环。更多Python风格:

for _ in range(10):
next(vcf,None)

# unindent here
for row in vcf:
print(row)

next 中的 None 参数确保即使文件短于 10 行,它也不会引发 StopIteration 而是产生默认值(您忽略的)

关于python - 是否可以阻止迭代器到达文件末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com