2012-10-06 47 views
13

我需要附加到一个pickle文件(因为我一次没有与我一起的整个字典)。所以,做我写了下面的代码是一样的:如何在python中使用appele和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")) 

然而,当我加载咸菜文件我没有找到字典F的存在价值?????

有人可以请建议我应该如何去附加在泡菜文件?

而且数据库,如“DBM”不工作对我的需要,因为我在窗口工作

+0

什么让你觉得两个附加咸菜流将以某种方式神奇地被接受为一个新的对象?如果你的数据太大而不适合内存,使用数据库(你有很多选择,dbm不是唯一的选择)。 –

+0

['ZODB'](http://www.zodb.org/)可以在Windows上正常工作;它也存放腌菜。 –

+0

@Chris我真的很新的python ..所以你可以帮我通过建议一些数据库或例如,,,这将是非常好的 –

回答

36

味酸流是完全独立的,所以取储存将unpickle一个对象在同一时间。

因此,要unpickle多个流,你应该反复unpickle的文件,直到你得到的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 

所以你unpickle代码可能看起来像

import pickle 
objs = [] 
while 1: 
    try: 
     objs.append(pickle.load(f)) 
    except EOFError: 
     break