Как использовать append с pickle в python?

Мне нужно добавить файл 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, я не нахожу значение словаря f там?????

Может кто-нибудь, пожалуйста, предложите, как мне следует добавлять в файл pickle???

Также базы данных, такие как "dbm", не работают для моей потребности, поскольку я работаю над окнами

Ответ 1

Потоки рассола полностью автономны, и поэтому рассыпание будет разбрасывать по одному объекту за раз.

Поэтому, чтобы разблокировать несколько потоков, вы должны повторно распечатывать файл до тех пор, пока не получите 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

поэтому ваш код без клавиатуры может выглядеть так:

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