4

我知道逐行迭代文件,我可以使用这样的构造:

for line in file:
    do stuff

但是,如果我在for的某个地方也有一个break语句,一旦我离开了for块,我如何判断是break让我脱离了for构造还是因为我打到了文件的末尾已经?

我尝试了如何找出文件是否在其`eof`中的建议?

f.tell() == os.fstat(f.fileno()).st_size

但这似乎不适用于我的 Windows 机器。基本上, f.tell() 总是返回文件的大小。

4

2 回答 2

15

你可以使用for..else

for line in f:
  if bar(line):
    break
else:
  # will only be called if for loop terminates (all lines read)
  baz()

资源

else 套件在 for 之后执行,但前提是 for 正常终止(而不是中断)。

Ned Batchelder 关于 for..else 的文章

于 2013-11-04T22:20:43.763 回答
0

一个非常简单的解决方案是设置一个标志:

eof = False
for line in file:
    #do stuff
    if something:
        break
else:
    eof = True

最后,如果eofTrue,则表示您到达文件末尾。否则,仍有一些线条。

这里重要的是for...else构造。只有当 for 循环通过而没有碰到break.

于 2013-11-04T22:20:54.543 回答