Python I / O:目的与?

时间:2013-11-08 22:30:36

标签: python io

对于文件I / O的目的是什么:

with open

我应该使用它而不是:

 f=open('file', 'w')
 f.write('foo)'
 f.close()

4 个答案:

答案 0 :(得分:8)

始终使用with statement

来自docs

  

在处理文件时,最好使用 with 关键字   对象。这样做的好处是文件在之后正确关闭   即使在途中出现异常,它的套件也会完成。它也比编写等效的try-finally块短得多。

如果您没有显式关闭文件,那么文件对象可能会在内存中闲逛,直到它被垃圾回收,这会隐式调用文件对象上的close()。因此,最好使用with语句,因为即使发生错误,它也会显式关闭文件。

相关:Does a File Object Automatically Close when its Reference Count Hits Zero?

答案 1 :(得分:1)

是。您应该尽可能使用with

这是使用open的返回值作为 context manager 。因此,with不仅仅用于open,而且在任何情况下都应该优先考虑对象(通常放在finally中进行一些清理块)。在这种情况下:退出上下文时,将调用文件对象的.close()方法。

上下文管理器“清理”的另一个好例子是threading的{​​{1}}:

Lock

在这种情况下,上下文管理器是lock = Lock() with lock: #do thing #lock is released outside the context - 锁定。

使用.release()__enter__方法的任何内容都可以用作上下文管理器。或者,更好的是,您可以使用__exit__来制作具有contextlib装饰的上下文管理器。 More here.

答案 2 :(得分:0)

基本上它试图避免的是:

set things up
try:
    do something
finally:
    tear things down

但是使用with语句可以安全地说,打开一个文件,一旦退出with语句的范围,文件就会被关闭。

with语句调用类的__enter__函数,该函数执行初始设置,并确保在最后调用__exit__函数,这样可确保一切正确关闭。

答案 3 :(得分:-1)

with语句是轻松编写更健壮代码的快捷方式。这样:

with open('file', 'w') as f:
    f.write('foo')

相当于:

try:
    f = open('file', 'w')
    f.write('foo')
finally:
    f.close()