CodeGym /Cours Java /Python SELF FR /Sérialisation

Sérialisation

Python SELF FR
Niveau 22 , Leçon 0
Disponible

8.1 Qu'est-ce que la sérialisation

Après avoir appris à travailler avec les fichiers, à sauvegarder et lire les données, il est temps d'apprendre à travailler sérieusement avec les fichiers. Aujourd'hui, on va commencer à explorer la sérialisation.

Sérialisation — c'est le processus de transformation d'un objet en une séquence d'octets ou un format qui peut être enregistré dans un fichier, transmis sur un réseau ou sauvegardé dans une base de données. Désérialisation — c'est le processus inverse, où cette séquence d'octets est utilisée pour recréer l'objet original.

Pour enregistrer un objet dans un fichier (ou le transmettre via un réseau), il faut le transformer en une chaîne (ou un ensemble d'octets) qu'il sera facile d'écrire dans un fichier (et de lire à partir de ce fichier) ou de transmettre sur un réseau.

Voici les 4 principaux cas d'utilisation de la sérialisation :

  • Enregistrement de l'état des objets : Pour conserver l'état d'un objet entre les exécutions d'un programme.
  • Transmission de données : Pour transférer des objets sur un réseau entre différents composants d'un système ou entre différents systèmes.
  • Mise en cache : Pour stocker des objets en cache pour un accès rapide.
  • Bases de données : Pour stocker des structures de données complexes dans des bases de données.

Il existe de nombreuses bibliothèques qui réalisent la sérialisation, chacune conçue pour des besoins spécifiques. Nous allons en découvrir cinq, et deux d'entre elles seront étudiées en détail.

Voici les plus populaires parmi elles :

  • Module pickle
  • Module json
  • Module yaml
  • Module marshal
  • Module shelve

Ci-dessous un aperçu rapide de chacune d'elles :

8.2 Module pickle

pickle — est un module intégré pour la sérialisation et la désérialisation des objets Python. Il permet de sauvegarder et de restaurer pratiquement n'importe quel objet Python, y compris les classes définies par l'utilisateur.

Exemple d'utilisation de pickle :


import pickle

# Exemple d'objet à sérialiser
data = {'name': 'Alice', 'age': 30, 'is_student': False}
            
# Sérialisation de l'objet dans un fichier
with open('data.pkl', 'wb') as file:
    pickle.dump(data, file)
            
# Désérialisation de l'objet à partir d'un fichier
with open('data.pkl', 'rb') as file:
    loaded_data = pickle.load(file)
            
print(loaded_data)

8.3 Module json

json — est un module intégré pour travailler avec JSON (JavaScript Object Notation). JSON est un format texte utilisé pour l'échange de données entre le client et le serveur.

Exemple d'utilisation de json :


import json

# Exemple d'objet à sérialiser
data = {'name': 'Bob', 'age': 25, 'is_student': True}
            
# Sérialisation de l'objet en chaîne JSON
json_string = json.dumps(data)
print(json_string)
            
# Sérialisation de l'objet dans un fichier JSON
with open('data.json', 'w') as file:
    json.dump(data, file)
            
# Désérialisation de l'objet à partir de la chaîne JSON
loaded_data = json.loads(json_string)
print(loaded_data)
            
# Désérialisation de l'objet à partir du fichier JSON
with open('data.json', 'r') as file:
    loaded_data = json.load(file)
print(loaded_data)

8.4 Module yaml

yaml (YAML Ain't Markup Language) — est un format de sérialisation de données lisible par des humains. En Python, la bibliothèque externe PyYAML est utilisée pour travailler avec YAML.

Exemple d'utilisation de yaml :


import yaml

# Exemple d'objet à sérialiser
data = {'name': 'Carol', 'age': 27, 'is_student': False}
            
# Sérialisation de l'objet en chaîne YAML
yaml_string = yaml.dump(data)
print(yaml_string)
            
# Sérialisation de l'objet dans un fichier YAML
with open('data.yaml', 'w') as file:
    yaml.dump(data, file)
            
# Désérialisation de l'objet à partir de la chaîne YAML
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
            
# Désérialisation de l'objet à partir du fichier YAML
with open('data.yaml', 'r') as file:
    loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)

8.5 Module marshal

marshal — est un module intégré pour la sérialisation des objets Python, utilisé pour la sérialisation du code Python. Il est plus rapide que pickle, mais supporte moins de types d'objets et est moins flexible.

Exemple d'utilisation de marshal :


import marshal

# Exemple d'objet à sérialiser
data = {'name': 'Dave', 'age': 35, 'is_student': True}

# Sérialisation de l'objet dans un fichier
with open('data.marshal', 'wb') as file:
    marshal.dump(data, file)
            
# Désérialisation de l'objet à partir d'un fichier
with open('data.marshal', 'rb') as file:
    loaded_data = marshal.load(file)
            
print(loaded_data)

8.6 Module shelve

shelve — est un module intégré qui offre une possibilité simple de sauvegarder des objets Python dans des fichiers en utilisant un stockage basé sur des clés, similaire à un dictionnaire.

Exemple d'utilisation de shelve :


import shelve

# Exemple d'objet à sérialiser
data = {'name': 'Eve', 'age': 28, 'is_student': False}
            
# Sérialisation de l'objet dans un fichier
with shelve.open('data.shelve') as db:
    db['person'] = data
            
# Désérialisation de l'objet à partir d'un fichier
with shelve.open('data.shelve') as db:
    loaded_data = db['person']
            
print(loaded_data)

Bien que les modules eux-mêmes et le format de sauvegarde des données diffèrent, le travail avec eux du point de vue du programmeur est très similaire. Nous allons maintenant examiner en détail le fonctionnement du module pickle et du module json.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION