2016-01-18 6 views
0

Когда я использую модуль pickle, я могу использовать метод pickle.dump() для сохранения многих объектов в файле. Но когда я использую Pickle.load(), этот метод может загружать только один объект. Что я должен делать, когда хочу загрузить все объекты?Как загрузить все объекты рассола в питоне?

+0

Что все объекты? Вам просто нужно загрузить только один файл, даже если демпинг создает несколько объектов при демпинге. –

+2

Пожалуйста, дайте ** код ** пример того, что вы делаете, и почему/что не работает как ожидаемый –

ответ

2

Ваш ответ указывает, что вы используете несколько вызовов 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) 
+0

Спасибо за ваш ответ. Ваш ответ может решить мой вопрос. – lens