Preciso salvar cerca de uma dúzia de objetos em um arquivo e restaurá-los mais tarde. Tentei usar um loop for com pickle e shelve, mas não funcionou direito.
Editar.
Todos os objetos que eu estava tentando salvar estavam na mesma classe (eu deveria ter mencionado isso antes), e eu não percebi que poderia salvar a classe inteira assim:
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'
Respostas:
Se você precisar salvar vários objetos, pode simplesmente colocá-los em uma única lista, ou tupla, por exemplo:
Se você tiver muitos dados, pode reduzir o tamanho do arquivo passando
protocol=-1
paradump()
;pickle
irá então usar o melhor protocolo disponível em vez do protocolo histórico padrão (e mais compatível com versões anteriores). Neste caso, o arquivo deve ser aberto no modo binário (wb
erb
, respectivamente).O modo binário também deve ser usado com Python 3, pois seu protocolo padrão produz dados binários (ou seja, não texto) (modo de escrita
'wb'
e modo de leitura'rb'
).fonte
with open('objs.pickle', 'wb') as f:
(observe owb
).with open('objs.pkl') as f:
comparar com simplesmenteobj1, obj2 = pickle.load(open("objs.pkl","rb"))
? Existe alguma diferença entre esses dois?Existe uma biblioteca interna chamada
pickle
. Usandopickle
você pode despejar objetos em um arquivo e carregá-los mais tarde.fonte
f = open('store.pckl', 'wb')
para abrir um arquivo para escrever. Consulte stackoverflow.com/questions/13906623/… E use `f = open ('store.pckl', 'rb') para abrir um arquivo para leitura. Consulte stackoverflow.com/questions/7031699/… .Você deve olhar para os módulos de prateleira e picles . Se você precisa armazenar muitos dados, pode ser melhor usar um banco de dados
fonte
Outra abordagem para salvar várias variáveis em um arquivo pickle é:
fonte
Você pode usar o
klepto
, que fornece armazenamento em cache persistente na memória, disco ou banco de dados.Então, após reiniciar o intérprete ...
Obtenha o código aqui: https://github.com/uqfoundation
fonte
A abordagem a seguir parece simples e pode ser usada com variáveis de tamanhos diferentes:
fonte
hickle
pacote é mais robusto (menos sujeito a erros) e ainda mais simples (menos código) do quepickle
.