Python的tarfile.open需要close()吗?

时间:2014-08-04 06:55:40

标签: python tar tarfile

tarfile的官方python文档中,我看不到使用

创建的tarfile
tarfile.open('example.tar', 'r:*')

一旦你不再需要它就应该关闭。
在其他一些示例中(例如here),您经常会看到tar文件无法关闭。

如果我在某些功能中更频繁地打开相同的tar文件而不总是关闭它,我会遇到问题吗?

def example(name):
    f = tarfile.open(name, 'r:*')
    # do some other stuff
    # not closing the tarfile object
    return result

example('example.tar')
example('example.tar')

在'r'而不是'w'模式下打开tarfile是否有区别(明显的读/写除外)?
在示例中,如果使用写入模式'w'打开tarfile,它们总是关闭tar文件?

2 个答案:

答案 0 :(得分:9)

是的,可以并且应该关闭TarFile objecttarfile.open()返回的内容)。

您可以在with语句中将对象用作上下文管理器,以使其自动关闭:

with tarfile.open(name, 'r:*') as f:
    # do whatever
    return result

TarFile对象应该被视为Python中的任何其他文件对象;当可以依赖于文件对象在清除所有对它的引用时自动关闭,但是明确地关闭它会好得多。当文件打开以供写入时,这会同样适用。

答案 1 :(得分:4)

如果以模式打开关闭它的原因=' w'如果不这样做,对文件的实际写入可能会保持缓冲状态,并且对文件的后续用户不可见。因此,如果您希望编写一个文件并稍后在同一程序中读取它,则必须在两者之间关闭它。 Python中的常规文件对象也是如此。

您应该始终关闭文件对象。当它们可写时,这只是非常重要。