下面两种方法逐行读取文件的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
或者有什么东西我不见了?
答案 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'>