use*_*420 12 python pickle data-dictionary
我用这种方式保存了一个python字典:
import cPickle as pickle
pickle.dump(dictname, open("filename.pkl", "wb"))
Run Code Online (Sandbox Code Playgroud)
我以这种方式将其加载到另一个脚本中:
dictname = pickle.load(open("filename.pkl", "rb"))
Run Code Online (Sandbox Code Playgroud)
怎么可能在此之后关闭文件?
Ada*_*eld 33
最好使用一个with语句,它会在语句结束时关闭文件,即使发生异常:
with open("filename.pkl", "wb") as f:
pickle.dump(dictname, f)
...
with open("filename.pkl", "rb") as f:
dictname = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)
否则,只有在垃圾收集器运行时才会关闭该文件,并且当发生这种情况时,该文件是不确定的,几乎无法预测.
使用该with语句是更好的方法,但恰恰相反,如果你不使用with,你应该保留一个文件句柄......并从那里关闭.
f = open('filename.pkl', 'wb')
pickle.dump(dictname, f)
f.close()
Run Code Online (Sandbox Code Playgroud)
在另一个脚本中:
f = open('filename.pkl','rb')
dictname = pickle.load(f)
f.close()
Run Code Online (Sandbox Code Playgroud)
这基本上with就是为你做的.
但是......如果你被困(无论出于什么原因),你最初发布的代码,并回答你的原始问题......是的,垃圾收集器将在未来某个未指定的时间为你关闭它.或者您可以使用该gc模块跟踪对文件对象的引用,然后将其关闭.有一些代码可以帮助你做到这一点,例如:https: //github.com/uqfoundation/dill/blob/master/dill/pointers.py
但是,with并且f.close()更受欢迎,gc除非你真的在泡菜中,否则你应该避免追踪模块.
| 归档时间: |
|
| 查看次数: |
16388 次 |
| 最近记录: |