for line in open(文件名)
我经常看到类似这样的Python代码:
for line in open(filename):
do_something(line)
那这个代码里,文件名什么时候会被关闭呢?
这样写会不会更好呢:
with open(filename) as f:
for line in f.readlines():
do_something(line)
4 个回答
9
with
这个写法更好,因为它会在操作完成后自动关闭文件。你甚至不需要使用 readlines()
,直接用 for line in file
就可以了。
我觉得第一个写法没有关闭文件。
11
别用 .readlines()
这个方法。对于大文件来说,它会占用很多内存,既多余又不太好。使用 'with'
语句块的方式总是能确保文件会被关闭。
with open(filename) as file_:
for line in file_:
do_something(line)
如果你用简单的 'for'
循环来处理文件,文件什么时候会被关闭就取决于你用的 Python 版本了。
41
filename
会在它的作用域结束时关闭。通常来说,这个作用域就是方法的结束。
是的,使用with
会更好。
一旦你有了一个文件对象,你就可以通过调用这个对象的方法来进行所有的文件输入输出操作。[...] 当你完成文件操作后,应该调用这个对象的
close
方法来关闭与文件的连接:input.close()
在一些简单的脚本中,人们常常会省略这一步,因为Python会在垃圾回收时自动关闭文件对象(在主流的Python中,这意味着文件几乎会立即关闭,尽管其他一些重要的Python实现,比如Jython和IronPython,采用了更宽松的垃圾回收策略)。不过,尽早关闭文件是一个好的编程习惯,尤其是在较大的程序中,这样可以避免有太多不必要的打开文件存在。需要注意的是,
try
/finally
特别适合确保文件在函数因为未捕获的异常而终止时也能被关闭。