Как считать несколько сериализованных объектов из pickle

192 просмотра
0
0 Комментариев

Как считать в список несколько сериализованных объектов с помощью функции pickle? Пытался считать таким образом:

data2 = []
with open("AllOutputMethodsObj.txt", "rb") as f:
    for _ in range(pickle.load(f)):
        data2.append(pickle.load(f))
print (str(data2))

Но на выходе получаю ошибку:

for _ in range(pickle.load(f)):
EOFError: Ran out of input

Количество сериализованных объектов мне не известно. На вход подается файл с неизвестным количеством сериализованных объектов.


Добавить комментарий

2 Answers

Python Опубликовано 12.12.2018
0

import pickle
objs = dict(a=1, b=2), [3, 4], {5, 6}
pickle.dump(objs, open('test.tt', 'wb'))
for ob in pickle.load(open('test.tt', 'rb')):
    print(ob)

Добавить комментарий
0

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

import pickle
 
with open("objects.pickle", "rb") as file:
    a, b, c = pickle.load(file)

При этом объекты также были сохранены с помощью ровно одного pickle.dump() вызова:

with open("objects.pickle", "wb") as file:
    pickle.dump([a, b, c], file)

Если вы хотите в разное время объекты сериализовать, можно shelve модуль попробовать:

import shelve
 
with shelve.open('objects') as db:
    db['a'] = a
    ...
    db['b'] = b

Это работает одновременно и на чтение и на запись:

with shelve.open('objects') as db:
    a = db['a']  # read
    a += 1       # modify
    db['a'] = a  # write back

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up