LangagePersistance

[wiki: Persistance] [#license ©]

PageOutline

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 pickle et shelve.

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]


Attachments