Мне нужно сохранить около дюжины объектов в файл, а потом восстановить их. Я пытался использовать цикл for с рассолом и полкой, но это не сработало.
Редактировать.
Все объекты, которые я пытался сохранить, находились в одном классе (я должен был упомянуть об этом раньше), и я не понимал, что могу просто сохранить весь класс следующим образом:
import pickle
def saveLoad(opt):
global calc
if opt == "save":
f = file(filename, 'wb')
pickle.dump(calc, f, 2)
f.close
print 'data saved'
elif opt == "load":
f = file(filename, 'rb')
calc = pickle.load(f)
else:
print 'Invalid saveLoad option'
Ответы:
Если вам нужно сохранить несколько объектов, вы можете просто поместить их в один список или кортеж, например:
Если у вас много данных, вы можете уменьшить размер файла, перейдя
protocol=-1
кdump()
;pickle
затем будет использовать наилучший доступный протокол вместо исторического (и более обратно совместимого) протокола по умолчанию. В этом случае файл необходимо открыть в двоичном режиме (wb
иrb
, соответственно).Двоичный режим также следует использовать с Python 3, поскольку его протокол по умолчанию производит двоичные (т.е. нетекстовые) данные (режим записи и режим
'wb'
чтения'rb'
).источник
with open('objs.pickle', 'wb') as f:
(обратите внимание наwb
).with open('objs.pkl') as f:
просто сравниватьobj1, obj2 = pickle.load(open("objs.pkl","rb"))
? Есть ли разница между этими двумя?Есть встроенная библиотека под названием
pickle
. Используяpickle
вы можете выгружать объекты в файл и загружать их позже.источник
f = open('store.pckl', 'wb')
чтобы открыть файл для записи. Обратитесь к stackoverflow.com/questions/13906623/… И используйте `f = open ('store.pckl', 'rb'), чтобы открыть файл для чтения. См. Stackoverflow.com/questions/7031699/… .Стоит посмотреть на полки и модули рассола . Если вам нужно хранить много данных, может быть лучше использовать базу данных
источник
Другой подход к сохранению нескольких переменных в файл рассола:
источник
Вы можете использовать
klepto
, который обеспечивает постоянное кэширование в памяти, на диске или в базе данных.Затем после перезапуска интерпретатора ...
Получите код здесь: https://github.com/uqfoundation
источник
Следующий подход кажется простым и может использоваться с переменными разного размера:
источник
hickle
package более надежен (меньше подвержен ошибкам) и даже проще (меньше кода), чемpickle
.