如何在使用"for"语句迭代文件对象后检测Python中的文件结尾

Ric*_*ich 4 python

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

for line in file:
    do stuff
Run Code Online (Sandbox Code Playgroud)

但是,如果我在for中的某个地方也有一个break语句,一旦我不在for块中,我该如何判断是否是让我退出for for构造的中断OR它是因为我命中了文件的末尾已经?

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

f.tell() == os.fstat(f.fileno()).st_size
Run Code Online (Sandbox Code Playgroud)

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

dm0*_*514 15

你可以用 for..else

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

资源

else套件在for之后执行,但前提是for for normal(不是中断).

Ned Batchelder关于for..else的文章