什么时候需要关闭文件,什么时候不在python中?

Yin*_*ong 5 python file

我试图编写以负责任的方式管理资源的代码.我理解使用后确保文件关闭的常用习惯用法是

with open("filename.txt", 'r') as f:
    # ...use file `f`...
Run Code Online (Sandbox Code Playgroud)

但是,我经常看到人们做以下事情:

data = cPickle.load(open("filename.pkl", 'r'))
Run Code Online (Sandbox Code Playgroud)

我想知道这是一种正确的方式,filename.pkl即使cPickle抛出异常,Python总是关闭吗?一些解释(或解释文章的指示)是否安全?

Kas*_*mvd 4

Python 不会自动为您关闭文件,因为它不知道您何时完成文件对象。您需要显式关闭文件或将代码(包含该open(...)函数)包装在with语句中。以下是关于模块的 python 文档示例pickle

import pprint, pickle

pkl_file = open('data.pkl', 'rb')

data1 = pickle.load(pkl_file)
pprint.pprint(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)

pkl_file.close()
Run Code Online (Sandbox Code Playgroud)

使用with这是一种更具 Python 风格的方法,您可以执行以下操作:

with open("filename.pkl", 'r') as f:
    data = cPickle.load(f)
Run Code Online (Sandbox Code Playgroud)