6

tarfile的官方 python 文档中,我没有看到使用创建的 tarfile

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

一旦你不再需要它就应该关闭它。
在其他一些示例中(例如此处),您经常会看到未关闭的 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”打开 tar 文件,他们总是关闭它?

4

2 回答 2

13

是的,一个TarFile对象(什么tarfile.open()返回)可以而且应该被关闭。

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

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

一个TarFile对象应该像 Python 中的任何其他文件对象一样对待;您可以依赖文件对象在清除所有对它的引用后自动关闭,但最好显式关闭它。当文件打开以进行写入时,这双重适用。

于 2014-08-04T06:59:07.363 回答
5

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

您应该始终关闭文件对象。当它们可写时,它就显得格外重要。

于 2014-08-04T07:00:13.613 回答