Pythonic逐行读取文件的方法?

Nat*_*tan 4 python

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

with open('file', 'r') as f:
    for line in f:
        print line
Run Code Online (Sandbox Code Playgroud)

要么

with open('file', 'r') as f:
    for line in f.readlines():
        print line
Run Code Online (Sandbox Code Playgroud)

还是有什么我想念的?

g.d*_*d.c 11

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

with open('file', 'r') as f:
  for line in f:
    # code
Run Code Online (Sandbox Code Playgroud)

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

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


Dav*_*veP 7

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

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

for line in open('file', 'r'):
    print line
Run Code Online (Sandbox Code Playgroud)

  • 这会留下一个打开的文件句柄吗? (2认同)
  • @agf——也许吧。我几乎不认为额外的 1 行非常惯用的代码是“防御性编码”或以任何方式过多。 (2认同)