Pythonic逐行读取文件的方法?

时间:2012-11-28 03:02:49

标签: python

下面两种方法逐行读取文件的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

或者有什么东西我不见了?

3 个答案:

答案 0 :(得分:11)

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

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

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

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

答案 1 :(得分:7)

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

不应遵循悬挂文件句柄的原始答案 但是,如果除了阅读这些行之外你不需要f用于任何目的,你可以这样做:

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

答案 2 :(得分:1)

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

加:关于 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'>