打开文件并对该文件执行一行操作会关闭该文件吗?

时间:2018-07-02 23:04:35

标签: python file-io contextmanager

打开文件并随后在同一行中对该文件执行操作是否可以安全地执行而无需随后关闭文件?

例如,如果我正在使用zipfile模块,并且想要在名为file_list的zip文件中获取文件列表,那么可以安全地执行以下操作:

import zipfile
import os
zip_path = os.path(...)

file_list = zipfile.ZipFile(zip_path).namelist()

当然,我知道这段代码可以安全地完成同一件事,尽管分两行:

import zipfile
import os
zip_path = os.path(...)

with zipfile.ZipFile(zip_path) as my_zip:
    file_list = my_zip.namelist()

哪个更好?

2 个答案:

答案 0 :(得分:1)

来自docs

  

ZipFile.close()

     

关闭存档文件。您必须先退出close(),然后退出程序,否则基本记录将不会被写入。

通常来说,使用上下文管理器通常总是更好。它被认为更整洁,更安全。

答案 1 :(得分:0)

It will close the file when it's garbage collected

# ZipFile in zipfile.py
def __del__(self):
    """Call the "close()" method in case the user forgot."""
    self.close()

如果使用该衬管,则不会创建参照,因此应将其丢弃并依次关闭。但是,您并不是依赖于GC何时运行的实现细节,而不是最好的主意,因此最好使用with

例如one liner wouldn't behave the same way with pypy