Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site https://www.yesik.it !

Les pickles sont une spécialité anglaise. Il s'agit de petits légumes conservés dans du vinaigre à la manière des cornichons. Ce n'est pas du tout de cela que nous allons parler ici. Mais plutôt du module Python pickle dont le rôle est de conserver et retrouver des objets python entre deux exécutions d'un programme.

En utilisant un vocabulaire un peu plus formel, pickle est une solution de sérialisation/désérialisation des objets Python. Et c'est ce mécanisme que nous allons brièvement introduire ici.

Un exemple

Brièvement ai-je dit. Pourquoi brièvement? Et bien parce qu'il n'y a pas grand chose à dire: Ca marche presque tout seul! Comme un exemple vaut mieux que 1000 mots, en voici tout de suite un:

# vim : set fileencoding=utf-8 : 
 
import pickle
 
# Les objets à sauvegarder
legumes = {
    "Maïs": 2,
    "Cornichon": 4,
    "Poivron": 1,
    "Oignon": 3
}
 
# Ouverture du fichier de stockage
bocal = open("bocal", "w")
 
# Et on sauvegarde le tout:
pickle.dump(legumes, bocal)
 
# Et c'est fini. Reste à fermer le fichier.
bocal.close()

A part l'ouverture et la fermeture du fichier de stockage, tout le travail pour sauvegarder l'ensemble du dictionnaire dans un fichier consiste à appeler la fonction dump du module pickle. Son corollaire est la fonction load pour recharger les objets:

# vim : set fileencoding=utf-8 : 
 
import pickle
 
# Ouverture du fichier de stockage
bocal = open("bocal", "r")
 
# Et on charge le premier objet sauvegardé
legumes = pickle.load(bocal)
 
# Et c'est fini. Reste à fermer le fichier.
bocal.close()

Et c'est tout?

Non, bien sûr, mais l'essentiel est là. Si pour plus d'informations je vous renverrai à la documentation officielle, plusieurs points doivent cependant être notés.

Tout d'abord, il est possible de sérialiser quasiment n'importe quoi de cette manière: listes, tuples, dictionnaires, mais aussi des objets ou des fonctions (mais pas des méthodes).

Ensuite, on peut sérialiser plusieurs objets dans le même fichier. Il suffit pour cela d'appeler plusieurs fois pickle.dump, et autant de fois pickle.load au moment de recharger les objets. Voici un exemple qui illustre ces deux points:

import pickle
 
def hello_fr(n):
    print "Bonjour", n
 
def hello_en(n):
    print "Hello", n
 
user1 = ("John", hello_en )
user2 = ("Sylvain", hello_fr)
 
store = open("users", "w")
pickle.dump(user1, store)
pickle.dump(user2, store)
store.close()
 
# ...
 
store = open("users", "r")
user1 = pickle.load(store)
user2 = pickle.load(store)
store.close()

Enfin, tout dernier point à noter, pickle ne dispose en standard d'aucun mécanisme de sécurité ou de validation des données. Ne désérialisez donc jamais des données qui viennent d'une source non fiable ou qui auraient pu être modifiées par un utilisateur malveillant. Vous risqueriez d'introduire dans votre programme du code malicieux! Et vous ne le voulez pas, n'est ce pas...

Références

Récupérée de « http://chicoree.fr/w/Pickle »