下面两种方法逐行读取文件的 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
还是我缺少什么?
下面两种方法逐行读取文件的 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
还是我缺少什么?
文件句柄是它们自己的迭代器(具体来说,它们实现了迭代器协议)所以
with open('file', 'r') as f:
for line in f:
# code
是首选用法。 f.readlines()
返回行列表,这意味着将整个文件吸收到内存中-> 通常不建议使用,尤其是对于大文件。
应该指出的是,我同意上下文管理器值得的观点,并且在我的代码示例中包含了一个。
在您介绍的两个中,第一个是推荐练习。正如评论中所指出的,任何不使用上下文管理器的解决方案(如下所示)都意味着文件处于打开状态,这是一个坏主意。
留下悬空文件句柄的原始答案因此不应遵循
但是,如果除了阅读这些行之外您不需要f
任何目的,您可以这样做:
for line in open('file', 'r'):
print line
不需要 .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'>