Jan*_*ora 25 python python-2.7
我需要附加到一个pickle文件(因为我没有随身携带整个字典).所以为了做同样的事情,我写了以下代码:
import pickle
p={}
p[1]=2
q={}
q['a']=p
p={}
p[2]=0
pickle.dump(q, open("save12.p","ab"))
f={}
f['b']=p
pickle.dump(f,open("save12.p","ab"))
Run Code Online (Sandbox Code Playgroud)
但是,当我加载pickle文件时,我没有找到字典f的值吗?????
有人可以建议我应该如何附加在pickle文件中?
此外,像'dbm'这样的数据库不能满足我的需求,因为我正在使用Windows
nne*_*neo 55
Pickle流完全是独立的,因此unpickling将一次取消一个对象.
因此,要取消分割多个流,您应该反复取消该文件的取消,直到获得EOFError:
>>> f=open('a.p', 'wb')
>>> pickle.dump({1:2}, f)
>>> pickle.dump({3:4}, f)
>>> f.close()
>>>
>>> f=open('a.p', 'rb')
>>> pickle.load(f)
{1: 2}
>>> pickle.load(f)
{3: 4}
>>> pickle.load(f)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
EOFError
Run Code Online (Sandbox Code Playgroud)
所以你的unpickle代码可能看起来像
import pickle
objs = []
while 1:
try:
objs.append(pickle.load(f))
except EOFError:
break
Run Code Online (Sandbox Code Playgroud)
小智 6
#To append to a pickle file
import pickle
p={1:2}
q={3:4}
filename="picklefile"
with open(filename, 'a+') as fp:
pickle.dump(p,fp)
pickle.dump(q,fp)
#To load from pickle file
data = []
with open(filename, 'rb') as fr:
try:
while True:
data.append(pickle.load(fr))
except EOFError:
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33456 次 |
| 最近记录: |