65

我想逐行读取巨大的文本文件(如果找到带有“str”的行则停止)。如何检查是否到达文件结尾?

fn = 't.log'
f = open(fn, 'r')
while not _is_eof(f): ## how to check that end is reached?
    s = f.readline()
    print s
    if "str" in s: break
4

4 回答 4

149

无需在 python 中检查 EOF,只需执行以下操作:

with open('t.ini') as f:
   for line in f:
       # For Python3, use print(line)
       print line
       if 'str' in line:
          break

为什么with声明

with处理文件对象时最好使用关键字。这样做的好处是文件在其套件完成后正确关闭,即使在途中引发异常也是如此。

于 2013-07-30T14:16:19.583 回答
14

只需遍历文件中的每一行。Python 会自动检查文件结尾并为您关闭文件(使用with语法)。

with open('fileName', 'r') as f:
    for line in f:
       if 'str' in line:
           break
于 2013-07-30T14:15:46.373 回答
5

在某些情况下,您不能使用(非常有说服力的)with... for...结构。在这种情况下,请执行以下操作:

line = self.fo.readline()
if len(line) != 0:
     if 'str' in line:
         break

这将起作用,因为readline()留下一个尾随换行符,其中 EOF 只是一个空字符串。

于 2015-08-13T16:17:09.357 回答
1

您可以使用停止输出中的 2 行分隔

    with open('t.ini') as f:
       for line in f:
           print line.strip()
           if 'str' in line:
              break
于 2020-09-25T15:03:12.157 回答