5

下面两种方法逐行读取文件的 Pythonic 方法是什么?

with open('file', 'r') as f:
    for line in f:
        print line

或者

with open('file', 'r') as f:
    for line in f.readlines():
        print line

还是我缺少什么?

4

3 回答 3

11

文件句柄是它们自己的迭代器(具体来说,它们实现了迭代器协议)所以

with open('file', 'r') as f:
  for line in f:
    # code

是首选用法。 f.readlines()返回行列表,这意味着将整个文件吸收到内存中-> 通常不建议使用,尤其是对于大文件。

应该指出的是,我同意上下文管理器值得的观点,并且在我的代码示例中包含了一个。

于 2012-11-28T03:05:21.953 回答
7

在您介绍的两个中,第一个是推荐练习。正如评论中所指出的,任何不使用上下文管理器的解决方案(如下所示)都意味着文件处于打开状态,这是一个坏主意。

留下悬空文件句柄的原始答案因此不应遵循 但是,如果除了阅读这些行之外您不需要f任何目的,您可以这样做:

for line in open('file', 'r'):
    print line
于 2012-11-28T03:05:15.227 回答
1

不需要 .readlines() 方法调用。

PLUS:关于with声明

with语句的执行行为如下注释,

with open("xxx.txt",'r') as f:    
                                  // now, f is an opened file in context
    for line in f:
        // code with line

pass                              // when control exits *with*, f is closed
print f                           // if you print, you'll get <closed file 'xxx.txt'>
于 2012-11-28T04:06:01.017 回答