2016-12-10 3 views
1

Я новичок в python, и я пытаюсь использовать pickle для хранения нескольких объектов python в файл. Я знаю, что при добавлении новых объектов в существующий файл маринад я могу загрузить существующие объекты и сцепить новый один:есть объекты python (словари) для существующего файла pickle

# l is a list of existing dictionaries stored in the file: 
l = pickle.load(open('existing_file.p', 'rb')) 
new_dict = {'a': 1, 'b':2} 
l = l + [new_dict] 
# overwriting old file with the new content 
pickle.dump(open('existing_file.p', 'rw'), l) 

Я хотел, чтобы проверить, есть ли лучший способ прикрепления объекта как словарь к существующий маринованный файл без перезаписи всего содержимого. Любые намеки или предложения будут оценены.

ответ

1

pickle знает длину своих сериализованных объектов, поэтому вы можете просто добавлять новые маринованные объекты в конец списка и читать их по одному позже. После создания некоторых маринованные объектов путем добавления в мой файл рассола,

>>> with open('test.pickle', 'ab') as out: 
...  pickle.dump((1,2,3), out) 
... 
>>> with open('test.pickle', 'ab') as out: 
...  pickle.dump((4,5,6), out) 

Я могу читать их обратно, пока я не получу EOFError знать, что я сделал

>>> my_objects = [] 
>>> try: 
...  with open('test.pickle', 'rb') as infile: 
...   while True: 
...    my_objects.append(pickle.load(infile)) 
... except EOFError: 
...  pass 
... 
>>> my_objects 
[(1, 2, 3), (4, 5, 6)] 
+0

спасибо большое. Это сработало отлично! –

Смежные вопросы