J'ai besoin d'enregistrer une douzaine d'objets dans un fichier, puis de les restaurer plus tard. J'ai essayé d'utiliser une boucle for avec cornichon et étagère, mais cela n'a pas fonctionné correctement.
Éditer.
Tous les objets que j'essayais de sauvegarder étaient dans la même classe (j'aurais dû le mentionner avant), et je ne savais pas que je pouvais simplement sauvegarder toute la classe comme ceci:
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'
Réponses:
Si vous avez besoin de sauvegarder plusieurs objets, vous pouvez simplement les mettre dans une seule liste, ou tuple, par exemple:
Si vous avez beaucoup de données, vous pouvez réduire la taille du fichier en passant
protocol=-1
àdump()
;pickle
utilisera alors le meilleur protocole disponible au lieu du protocole historique par défaut (et plus rétrocompatible). Dans ce cas, le fichier doit être ouvert en mode binaire (wb
etrb
, respectivement).Le mode binaire doit également être utilisé avec Python 3, car son protocole par défaut produit des données binaires (c'est-à-dire non textuelles) (mode d'écriture
'wb'
et mode de lecture'rb'
).la source
with open('objs.pickle', 'wb') as f:
(notez lewb
).with open('objs.pkl') as f:
comparer simplementobj1, obj2 = pickle.load(open("objs.pkl","rb"))
? Y a-t-il une différence entre ces deux?Il existe une bibliothèque intégrée appelée
pickle
. En utilisant,pickle
vous pouvez vider des objets dans un fichier et les charger plus tard.la source
f = open('store.pckl', 'wb')
pour ouvrir un fichier dans lequel écrire. Reportez-vous à stackoverflow.com/questions/13906623/ ... Et utilisez `f = open ('store.pckl', 'rb') pour ouvrir un fichier à lire. Reportez-vous à stackoverflow.com/questions/7031699/… .Vous devriez regarder les modules d' étagères et de cornichons . Si vous avez besoin de stocker beaucoup de données, il peut être préférable d'utiliser une base de données
la source
Une autre approche pour enregistrer plusieurs variables dans un fichier pickle est:
la source
Vous pouvez utiliser
klepto
, qui fournit une mise en cache persistante à la mémoire, au disque ou à la base de données.Ensuite, après le redémarrage de l'interpréteur ...
Obtenez le code ici: https://github.com/uqfoundation
la source
L'approche suivante semble simple et peut être utilisée avec des variables de taille différente:
la source
hickle
package est plus robuste (moins sujet aux erreurs) et encore plus simple (moins de code) quepickle
.