Когда я использую модуль pickle, я могу использовать метод pickle.dump()
для сохранения многих объектов в файле. Но когда я использую Pickle.load()
, этот метод может загружать только один объект. Что я должен делать, когда хочу загрузить все объекты?Как загрузить все объекты рассола в питоне?
ответ
Ваш ответ указывает, что вы используете несколько вызовов dump
, чтобы сбрасывать несколько объектов в один поток. Если это так, ожидается, что вы знаете, сколько раз нужно позвонить load
, например. путем получения информации от первого загруженного объекта или количества постоянных объектов.
Если это не так, используйте один dump
сбросить все объекты путем упаковки их в виде кортежа:
pickle.dump((a, b, c), f)
Вы тогда сможете загрузить их на одном дыхании:
a, b, c = pickle.load(f)
Если вы не можете изменить демпинг код, чтобы использовать кортеж, вы не можете просто загрузить данные из потока до тех пор, встречая EOFError
:
objs = []
while 1:
try:
o = pickle.load(f)
except EOFError:
break
objs.append(o)
Спасибо за ваш ответ. Ваш ответ может решить мой вопрос. – lens
Что все объекты? Вам просто нужно загрузить только один файл, даже если демпинг создает несколько объектов при демпинге. –
Пожалуйста, дайте ** код ** пример того, что вы делаете, и почему/что не работает как ожидаемый –