Python的tarfile.open需要关闭吗?
在官方的 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
对象应该像其他文件对象一样对待;你可以指望文件对象在所有引用都被清理后自动关闭,但明确地关闭它会更好。尤其是当文件是以写入模式打开的时候,这一点更为重要。