2012-10-06 63 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