Проблема с модулем 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')