Comment sérialiser et désérialiser des données en Python

Python a plusieurs façons de sérialiser/désérialiser les données. Dans ce tutoriel nous allons voir le module maréchal et le module cornichon. Avant de voir comment sérialiser en Python, expliquons brièvement ce concept. La sérialisation est un processus largement utilisé pour enregistrer des objets dans un fichier ou une base de données ou pour les envoyer sur le réseau.

Il est temps de commencer par le tutoriel, nous verrons un exemple avec chaque module.

1. Module Maréchal


Avant de commencer il faut savoir que ce module n'assure pas la compatibilité entre les différentes versions du compilateur Python.

Exemple 1
Voyons le premier exemple très simple :

 import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Dans un premier temps, nous importons la bibliothèque marshal, nous avons créé une liste que nous allons sérialiser, puis nous la peignons et la désérialisons. La fonction décharges prend en charge la sérialisation et la fonction charges pour désérialiser (les deux reçoivent l'objet avec lequel verrouiller). Très facile comme vous l'avez vu. Voici une capture d'écran de son exécution :

Et ici, nous concluons avec le premier exemple.

Exemple 2
Dans cet exemple, nous allons écrire un objet dans un fichier.

 import marshal data = [1, 2, 3, 4] fileOut = open ("file.dat", "bw") marshal.dump (data, fileOut) fileOut.close () fileIn = open ("file.dat", "br") dataLoad = marshal.load (fileIn) print ("Deserialized:", dataLoad) fileIn.close () 
L'import et la liste sont conservés, seulement maintenant nous allons utiliser des fichiers, nous ouvrons un fichier en écriture, le b est pour les octets, et nous vidons la liste (maintenant la fonction est décharger et reçoit les données à écrire et le fichier), lorsque nous avons terminé, nous le fermons. Pour finir, nous ouvrons le même fichier en mode lecture et lisons à partir de celui-ci (notez que la fonction est charge, et qui reçoit le fichier en paramètre), pour finir on ferme le fichier.

Si on regarde le fichier fichier.dat, nous verrons ceci :

La mise en réseau n'est pas beaucoup plus difficile, n'oubliez pas la petite limitation de compatibilité entre les versions de Python. Passons à l'autre module.

2. Module de cornichon


Ce module est écrit en C, il en existe un autre appelé pickle qui est développé en Python, mais il est plus lent, il est donc conseillé d'utiliser cpickle. Contrairement à marshal, ce module va garantir la compatibilité entre les versions de Python, donc avant de programmer, nous devons prendre ces éléments en compte.

NoterDans Python 3, cPickle a été renommé en _pickle et est utilisé automatiquement par le module pickle.

Pour ce module, nous allons voir un exemple dans lequel nous utilisons des sockets, nous allons voir le code du serveur, il s'agit uniquement de la manière dont nous effectuerions la sérialisation ou la désérialisation, c'est pourquoi il n'inclut pas la gestion des erreurs et un un seul message est utilisé.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Data reçu: ", data) print (" Deserialized: ", pickle.loads (data)) s.close ()
Nous voyons que tout fonctionne comme avec les sockets normaux, seulement que les données reçues arriveront sérialisées, nous les désérialisons donc avec la fonction charges, comme vous pouvez le voir, il s'appelle de la même manière que dans le module marshal. Enfin nous verrons le client :
 import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. Fermer ()
Il n'y a pas de complication majeure, nous sérialisons l'objet avec décharges et nous l'envoyons au socket créé. Ci-dessous, je laisse la sortie du serveur lorsqu'un client se connecte, la sortie du client est ignorée car elle ne montre rien.

Jusqu'ici vient le tutoriel sur la sérialisation et la désérialisation des données en Python, car nous savons que ce langage nous facilite beaucoup les choses.

NoterLe tutoriel utilise la version de Python 3.5.

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave