2013-07-30 198 views
33

我想逐行读取大文本文件(并且如果发现有“str”的行则停止)。 如何检查,如果文件结束?Python:读取循环中的所有文本文件行

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 

回答

74

没有必要在Python检查EOF,简单地做:

with open('t.ini') as f: 
    for line in f: 
     print line 
     if 'str' in line: 
      break 

Why the with statement

它与文件打交道 对象时使用的with关键字好的做法。这具有如下优点:在 其套件结束后,即使在路上引发异常,该文件也能正确关闭。

8

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

with open('fileName', 'r') as f: 
    for line in f: 
     if 'str' in line: 
      break 
3

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

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

这样会起作用,因为该readline()留下了尾部的换行符,那里的EOF只是一个空字符串。

相关问题