36

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 の値が見つかりません?????

ピクルファイルに追加するにはどうすればよいか、誰かが提案してもらえますか???

また、Windows で作業しているため、「dbm」などのデータベースが必要に応じて機能しません

4

2 に答える 2

84

Pickle ストリームは完全に自己完結型であるため、unpickle は一度に 1 つのオブジェクトを unpickle します。

したがって、複数のストリームを unpickle するには、EOFError が発生するまでファイルを繰り返し 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 コードは次のようになります

import pickle
objs = []
while 1:
    try:
        objs.append(pickle.load(f))
    except EOFError:
        break
于 2012-10-06T17:24:33.837 に答える
22
#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
于 2018-10-25T06:06:35.190 に答える