Проблема с модулем Pickle

Когда расконсервирую из сохраненого файла словарь и вставляю в него новый элемен и сново консервирую его, то при повторной попытке извлеч словарь добавленого элемента там нет

import pickle
name = "fh"
lest = {"asd":"qwer",
        "sda":"asdfg12",
        "dfg":"355tf",
        "fgh":"df34",
        "fort":"nite"}
f = open("PIPBOIname.data", "ab")
pickle.dump(lest,f)
f.close()
print(lest,"\n")
lest.clear()


f = open("PIPBOIname.data", "rb")
lest = pickle.load(f)
print(lest,"\n")
n = "name"
ne = "124246346234455"
lest[n] = ne <----
print(lest,"\n")
f.close
print(lest,"\n")
f = open("PIPBOIname.data", "ab")
pickle.dump(lest,f)<----
f.close

lest.clear()

f = open("PIPBOIname.data", "rb")
list = pickle.load(f)
for item in list.items():
    print(item)

Вывод консоли:

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite'}

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite'}

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite', 'name': '124246346234455'}

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite', 'name': '124246346234455'}

('asd', 'qwer')
('sda', 'asdfg12')
('dfg', '355tf')
('fgh', 'df34')
('fort', 'nite')

Ответы (1 шт):

Автор решения: CrazyElf

Так получается из-за записи в файл в режиме "добавление" - "ab". Вы добавляете новый дамп в файл, но при чтении пикл берёт из файла только первый дамп и игнорирует последующие. Пишите файл каждый раз с нуля, в режиме "wb". Вывод скрипта после замены режима "ab" на "wb" (в двух местах кода):

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite'} 

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite'} 

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite', 'name': '124246346234455'} 

{'asd': 'qwer', 'sda': 'asdfg12', 'dfg': '355tf', 'fgh': 'df34', 'fort': 'nite', 'name': '124246346234455'} 

('asd', 'qwer')
('sda', 'asdfg12')
('dfg', '355tf')
('fgh', 'df34')
('fort', 'nite')
('name', '124246346234455')
→ Ссылка