2012-10-06 15 views
13

私はpickleファイルに追加する必要があります(私は辞書全体を一度に持っていないので)。私はそこfの辞書の値を見つけることができませんピクルスファイルをロードしていたときに、しかしpythonでpickleとappendを使う方法は?

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")) 

?????:だから同じことをするために、私は次のコードを書かれています

誰かがピクルファイルにどのように追加する必要がありますかをお勧めしますか?

はまた

+0

のようになります。ピクルのストリームは、どういうわけか魔法のように1つの新しいオブジェクトとして受け入れられますか?データが大きすぎてメモリに収まらない場合は、データベースを使用してください(多くの選択肢がありますが、dbmはその中で唯一のものです)。 –

+0

['ZODB'](http://www.zodb.org/)はウィンドウ上でうまく動作します。それはあまりにもピクルスを保存します。 –

+0

@Chris私はPythonには本当に新しい...あなたはいくつかのデータベースを示唆したり、例を与えることで私を助けることができます,,,それは本当に素晴らしいだろう –

答えて

36

ピクルスの流れは完全に自己完結型であるので、一度に一つのオブジェクトをunpickle化されますunpickle化ですが、Windowsで働いていると私の必要性のために働いていない「DBM」のようデータベース。あなたは例外EOFError得るまで

そのため、複数のストリームをunpickle化するために、あなたは繰り返しファイルunpickle化する必要があります

>>> 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化したり、コードを使用すると、2つが追加さだと思います何

import pickle 
objs = [] 
while 1: 
    try: 
     objs.append(pickle.load(f)) 
    except EOFError: 
     break 
関連する問題