[wiki: Persistance] [#license ©]
Généralités
- Les objets sont dit « persistants » lorsqu’ils ne disparaissent pas à la fin du programme Python en cours. Cela consiste en général à les « sérialiser », c’est à dire en produire une représentation binaire compacte, et à stocker cette représentation dans un fichier.
- En Python, la persistance repose sur des modules de la libraire standard, tels que
pickleetshelve.
Pickle / cPickle
- Ce module est capable de transformer en flot d’octets n’importe quel objet en mémoire. Ces octets peuvent être écrits dans un fichier, envoyés par réseau, etc.
- A l’inverse, le module peut lire et recrée en mémoire les objets d’un fichier, l’un après l’autre.
- Quand c’est disponible, préférez
cPickle, écrit en C et plus rapide. - ATTENTION : pas de garantie de portabilité de vos données entre des plateformes différentes.
#!python
class Vecteur:
def init(self,u=0,v=0):
self.x = u
self.y = v
def str(self):
return "({:.0f},{:.0f})".format(self.x,self.y)
v1 = Vecteur(1,2)
v2 = Vecteur(3,4)
import pickle
fw = open('vecteurs.pkl','wb')
pickle.dump(v1,fw)
pickle.dump(v2,fw)
fw.close()
fr = open('vecteurs.pkl','rb')
print(pickle.load(fr))
print(pickle.load(fr))
fr.close()
Shelve
- Ce module permet de ranger des objets dans un fichier, non pas séquentiellement, mais en les associant à des noms.
- Le fichier est manipulé comme si il s’agissait d’un dictionnaire.
#!python
class Vecteur:
def init(self,u=0,v=0):
self.x = u
self.y = v
def str(self):
return "({:.0f},{:.0f})".format(self.x,self.y)
import shelve
s = shelve.open('vecteurs.db')
s['v1'] = Vecteur(1,2)
s['v2'] = Vecteur(3,4)
s.close()
#...
s = shelve.open('vecteurs.db')
print(s.keys())
print(s['v1'])
print(s['v2'])
s.close()
#!python
Travaux Pratiques
1. Faites en sorte que le programme principal stocke l’état courant de la calculatrice avant de se terminer, et la restaure telle quelle à la prochaine éxecution. Servez vous par exemple d’un fichier main.pkl.
© David Chamont, Laboratoire Leprince-Ringuet (LLR) / IN2P3 / CNRS, Ecole polytechnique / Université Paris-Saclaybr
© Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution – Partage dans les Mêmes Conditions 4.0 International [=#license]