Python的tarfile.open需要关闭吗?

7 投票
2 回答
6892 浏览
提问于 2025-04-18 15:53

在官方的 Python 文档中,关于 tarfile 的部分,我没有找到关于创建的 tar 文件是否需要在不再使用时关闭的信息。

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')

打开 tar 文件时用 'r' 模式和 'w' 模式有什么区别吗(除了明显的读和写)?
因为在例子中,如果是用写模式 'w' 打开的 tar 文件,他们总是会关闭它?

2 个回答

5

如果你用模式'mode='w''打开了一个文件,关闭它的原因是,如果不关闭,写入文件的内容可能会被暂时存储在内存中,而不是直接写到文件里,这样后面使用这个文件的人就看不到这些内容。所以如果你打算在同一个程序里先写文件,然后再读取它,就必须在这两步之间关闭文件。Python中的普通文件对象也是一样的。

你应该始终关闭你的文件对象。当文件是可写的时候,这一点尤其重要。

14

没错,TarFile对象(就是tarfile.open()返回的东西)是可以并且应该被关闭的。

你可以把这个对象当作上下文管理器,使用with语句,这样它会自动关闭:

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

在Python中,TarFile对象应该像其他文件对象一样对待;你可以指望文件对象在所有引用都被清理后自动关闭,但明确地关闭它会更好。尤其是当文件是以写入模式打开的时候,这一点更为重要。

撰写回答