Le module pickle


pickle est un module de python qui permet de sauvegarder une ou plusieurs variables dans un fichier et de récupérer leurs valeurs ultérieurement. Les variables peuvent être de type quelconque.

L'importation de ce module peut se faire par:

 from pickle import *

Enregistrer des variables

Pour enregistrer des variables dans un fichier, il faut d'abord l'ouvrir en mode "wb":

 f = open (chemin du fichier,"wb")

Attention: ce type d'ouverture ne crée pas un fichier texte, mais un fichier binaire (d'où le "b"). Cela signifie que les données ne seront pas codées sous forme de texte et que si vous ouvrez un tel fichier avec un éditeur de texte vous obtiendrez à peu près n'importe quoi !

Pour enregistrer ensuite une variable dans le fichier, on utilise la procédure dump:

  dump (nom de la variable, f)
Exemple 1
    f = open("xyz","wb")
    x = 1961
    y = 1935
    z = "eric thirion"
    dump(x,f)
    dump(y,f)
    dump(z,f)
    f.close()

Ce programme enregistre les valeurs des trois variables x, y et z dans le fichier "xyz" du répertoire courant.

Pour vous montrer la différence entre un fichier binaire et un fichier texte. Voici ce que l'on obtient si l'on affiche ce fichier avec Bloc Note !

xyz.jpg, 17kB

Les caractères bizarres que l'on observe au début représentent les deux nombres entiers !

Lire des valeurs

Pour récupérer les valeurs des variables sauvegardées dans un fichier, il faut d'abord l'ouvrir en mode "rb":

 f = open (chemin du fichier,"rb")

On peut ensuite récupérer la valeur d'une variable avec la fonction load:

  nom de la variable = load (f)

Il faut bien sur lire les valeurs des variables dans l'ordre où elles ont été enregistrées.

Exemple 2

Nous supposons ici que les instructions de l'exemple 1 ont été exécutées et qu'il existe donc un fichier nommé "xyz" dans le repertoire courant, contenant dans l'ordre la valeur de x, celle de y, puis celle de z. Les valeurs de ces variables peuvent à présent être récupérées de la manière suivante:

    f = open("xyz","rb")
    x = load(f)
    y = load(f)
    z = load(f)
    f.close()
    print("x = ",x)
    print("y = ",y)
    print("z = ",z)

Résultat de l'exécution :

Load-xyz.jpg, 8,3kB

Utiliser un dictionnaire

Lorsque l'on a plusieurs données à sauvegarder comme dans les exemples précédents, il est préférable de les enregistrer dans une seule variable de type dictionnaire. On évite ainsi le problème de la cohérence de l'ordre des instructions dump avec les instructions load de récupération des données.

Exemple 3

Sauvegarde des valeurs des variables x, y, z avec un dictionnaire (à comparer avec l'exemple 1):

  f = open("xyz","wb")
  x = 1961
  y = 1935
  z = "eric thirion"
  d = { "x" : x, "y": y, "z" : z}
  dump(d,f)
  f.close()   

Récupération des valeurs des variables x, y, z (à comparer avec l'exemple 2):

    f = open("xyz","rb")
    d = load(f)
    x = d["x"]
    y = d["y"]
    z = d["z"]
    f.close()
    print("x = ",x)
    print("y = ",y)
    print("z = ",z)