如何在python中使用带pickle的append?

如何在python中使用带pickle的append?,python,python-2.7,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")) 但是,当我加载pickle文件时,我在那里找不到dictionary f的值 有没有人能建议我应该

我需要附加到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"))
但是,当我加载pickle文件时,我在那里找不到dictionary f的值

有没有人能建议我应该如何在pickle文件中添加


另外,像“dbm”这样的数据库不能满足我的需要,因为我在windows上工作,Pickle流是完全独立的,因此取消勾选将一次取消勾选一个对象

因此,要取消勾选多个流,应重复取消勾选文件,直到获得EOR:

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

是什么让你认为两个附加的pickle流会被神奇地接受为一个新对象?如果您的数据太大,无法放入内存,请使用数据库(您有很多选择,dbm不是唯一的选择);它也储存腌菜。
import pickle
objs = []
while 1:
    try:
        objs.append(pickle.load(f))
    except EOFError:
        break
#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