> Modules standards > Modules sur structures de données > pickling (sérialisation)
pickling (sérialisation)
Principe : écrire des structures de données dans des fichiers pour pouvoir les relire plus tard.
En python 3, toujours utiliser pickle, cPickle n'existe plus : pickle utilise automatiquement la version C si elle est disponible.
Séralisation en python : utiliser pickle ou cPickle (pas marshal !). Utilisation de pickle :
- le format de sérialisation est portable entre machines (mais spécifique de python)
- 3 formats (protocole) de sérialisation : 0 (ASCII, compatible avec les anciennes versions), 1 (binaire, compatible avec les anciennes versions) et 2 (binaire et plus efficace). pickle.HIGHEST_PROTOCOL est le plus élevé (recommandé), mais le défaut est 0.
- pickling : il suffit que la variable fh ait une fonction write :
import pickle
fh = open('out.ser','wb') # In binary format
pickler = pickle.Pickler(fh, pickle.HIGHEST_PROTOCOL)
pickler.dump(dict1)
pickler.dump(dict2)
fh.close()
- au lieu de construire un objet, on peut aussi faire directement : pickle.dump(dict1, fh, pickle.HIGHEST_PROTOCOL); pickle.dump(dict2, fh, pickle.HIGHEST_PROTOCOL)
- lecture de fichier de pickling : il suffit que la variable fh ait des fonctions read et readline :
fh = open('out.ser', 'rb')
unpickler = pickle.Unpickler(fh)
dict1 = unpickler.load()
dict2 = unpickler.load()
fh.close()
- au lieu de construire un objet, on peut aussi faire directement : dict1 = pickle.load(fh); dict2 = pickle.load(fh)
- si on part de bytes : myVar = pickle.loads(myBytes)
cPickle : pickle implémenté en C, peut être 1000 fois plus rapide que pickle.
- les formats de pickle et cPickle sont compatibles entre eux (on peut écrire avec cPickle et lire avec pickle par exemple).
- écriture : import cPickle; import pickle; cPickle.dump(dict1, fh, pickle.HIGHEST_PROTOCOL) (on peut aussi utiliser -1 au lieu de pickle.HIGHEST_PROTOCOL)
- lecture : import cPickle; dict1 = cPickle.load(fh)
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert