Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打开文件并在一行中对该文件执行操作是否会关闭该文件?_Python_File Io_Contextmanager - Fatal编程技术网

Python 打开文件并在一行中对该文件执行操作是否会关闭该文件?

Python 打开文件并在一行中对该文件执行操作是否会关闭该文件?,python,file-io,contextmanager,Python,File Io,Contextmanager,打开一个文件,然后在同一行中对该文件执行操作,这样做安全吗 例如,如果我正在使用zipfile模块,并希望获取名为file\u list的zip中的文件列表,是否可以安全地执行以下操作: import zipfile import os zip_path = os.path(...) file_list = zipfile.ZipFile(zip_path).namelist() 当然,我知道这段代码可以安全地完成同样的任务,尽管只需两行代码: import zipfile import o

打开一个文件,然后在同一行中对该文件执行操作,这样做安全吗

例如,如果我正在使用
zipfile
模块,并希望获取名为
file\u 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()
哪个更好?

来自:

ZipFile.close()

关闭存档文件。您必须在退出程序之前调用
close()
,否则将不会写入基本记录

一般来说,使用上下文管理器几乎总是更好的。人们认为它更整洁、更安全。

如果您使用一个线性,它不会创建一个ref,所以它应该被释放,然后关闭。但是您依赖于GC何时运行的实现细节,这不是最好的主意,您最好使用


例如,使用上下文管理器总是更好。但除非你不想保证资源会被释放。是的,当对象被回收时,文件对象将自动关闭。。。但是如果有错误呢?您是否因为某些原因缺少可用的行?@juanpa.arrivillaga我只是想编写更易于阅读的代码-我一直在使用上下文管理器,但我的代码嵌套得非常深,因为我还必须在同一代码块中进行分支和循环。使用函数创建更易于阅读的代码。不要把东西塞进一行。
# ZipFile in zipfile.py
def __del__(self):
    """Call the "close()" method in case the user forgot."""
    self.close()