什么时候需要关闭文件,什么时候不在python中?
我试图编写以负责任的方式管理资源的代码。我知道,确保文件在使用后关闭的一个常见习惯用法是什么时候需要关闭文件,什么时候不在python中?,python,file,Python,File,我试图编写以负责任的方式管理资源的代码。我知道,确保文件在使用后关闭的一个常见习惯用法是 with open("filename.txt", 'r') as f: # ...use file `f`... 然而,我经常看到人们这样做: data = cPickle.load(open("filename.pkl", 'r')) 我想知道这是一种正确的方法,Python是否总是关闭filename.pkl,即使cPickle抛出异常?一些解释(或指向解释这是否安全的文章的指针?您可以看
with open("filename.txt", 'r') as f:
# ...use file `f`...
然而,我经常看到人们这样做:
data = cPickle.load(open("filename.pkl", 'r'))
我想知道这是一种正确的方法,Python是否总是关闭filename.pkl
,即使cPickle
抛出异常?一些解释(或指向解释这是否安全的文章的指针?您可以看到
如果您使用以下内容:
f = open('filename', 'r')
...
# Always close
f.close()
或者,像这样:
with open('workfile', 'r') as f:
read_data = f.read()
f.closed # True
您还可以使用:
在您的示例中,应该关闭该文件,即使GC可能会处理它,但最好显式地这样做 Python不会自动为您关闭文件,因为它不知道您何时处理完file对象。您需要显式关闭文件或将代码(其中包含
open(…)
函数)包装到with
语句中。下面是一个关于pickle
模块的python文档示例:
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()
使用和
这是一种更具python风格的方法,您可以:
with open("filename.pkl", 'r') as f:
data = cPickle.load(f)
是的,一旦文件对象被垃圾收集,它就会被关闭。
cPickle
是否引发异常并不重要。但由于我们无法控制何时会发生这种情况,因此这确实是一种不好的做法,即坚持使用和
。
with open("filename.pkl", 'r') as f:
data = cPickle.load(f)