Cours avancé de développement Python
Chapitre
>
Niveau
Modules de sérialisation
Modules Marshal et Pickle
Objectif
Rendez-vous à la station-service et assurez-vous que les données sont correctement stockées en utilisant le module JSON pour formater les fichiers.
En poursuivant le chemin, nous trouvons quelques stations qui surveillent la distribution de l'eau et la qualité du sol pour le terrain en cours de développement en vue d'une future récolte. Pour traiter les données, il est efficace de les sérialiser. Bien que l'utilisation de JSON puisse être une solution généralisée efficace, il existe également quelques méthodes de sérialisation spécifiques à Python, à savoir les modules Marshal et Pickle. Le module Marshal est conçu pour une sérialisation/désérialisation rapide en convertissant les données en binaire, idéal pour des transferts de données simples. Le module Pickle est plus lent mais il est conçu pour traiter des structures de données plus complexes et est beaucoup plus flexible, idéal pour des structures de données plus grandes ou prioritaires.
Pour utiliser les modules Marshal et Pickle, importez leurs fonctions en écrivant : import marshal et import pickle. Pour nos besoins, nous utiliserons les fonctions suivantes :
marshal.dumps(): Sérialise les données dans un format binaire, conçu pour la vitesse au sein de Python. Prend un argument, à savoir les données que vous souhaitez sérialiser, et est limité aux types de données de base.marshal.loads(): Désérialise des données binaires en types de données lisibles par Python, limité dans ses capacités mais avec une exécution rapide. Prend un argument, à savoir les données à désérialiser.pickle.DEFAULT_PROTOCOL: Vérifie quelle version de protocole de sérialisation Pickle est par défaut dans votre version de Python. Les protocoles affectent la façon dont les données sont sérialisées.pickle.HIGHEST_PROTOCOL: Vérifie quelle version de protocole de sérialisation Pickle est la plus élevée disponible dans votre version de Python. Les protocoles affectent la façon dont les données sont sérialisées.pickle.dumps(): Sérialise des structures de données Python complexes en format binaire selon le protocole utilisé. Prend deux arguments, les données que vous souhaitez sérialiser et la version du protocole à utiliser lors de la sérialisation.pickle.loads(): Désérialise des données binaires en types de données lisibles par Python, puissant dans son étendue pour les objets Python. Prend un argument, à savoir les données que vous souhaitez désérialiser.
En plus de ces modules et fonctions, nous utiliserons également un module de formatage nommé pprint, que nous importerons en utilisant from pprint import pprint. Cela nous permet d'utiliser la fonction pprint() qui peut servir à formater des structures de données comme des dictionnaires, nous permettant d'afficher clairement les informations.
Pour commencer, marchez jusqu'à la marque X lumineuse à l'intérieur de la petite station de surveillance et faites face au terminal informatique. La station surveille la pression de l'eau et les conditions du sol du terrain voisin en cours de développement pour la plantation de cultures. Il existe une constante nommée reading, qui contient les données Python collectées par la station.
Créez une variable nommée data et stockez-y la valeur de la fonction marshal.dumps() en passant reading en argument. Comme ceci : data = marshal.dumps(reading). Utilisez la variable data avec la fonction pré-écrite display() pour visualiser les données de la variable sérialisée.
Sortez de la station et dirigez-vous vers la marque X dorée, utilisez la fonction open() pour ouvrir la porte et accéder au bureau. Marchez jusqu'à la marque X lumineuse en face du terminal, et désérialisez les données que vous venez de sérialiser. Créez une variable nommée output et stockez-y la valeur de marshal.loads() en passant la variable data en argument. Utilisez la fonction write() et ajoutez output en argument pour accéder aux données sérialisées que vous avez collectées à partir de la station de surveillance.
Marchez jusqu'à la marque X lumineuse sur le tapis bleu dans le bureau, sur le terminal nous vérifierons les protocoles pour déterminer quel type de sérialisation le module pickle utilisera lors du traitement des données. Dans la fonction pré-écrite write(), définissez les arguments comme pickle.DEFAULT_PROTOCOL et pickle.HIGHEST_PROTOCOL. Cela permettra de vérifier quel est le protocole de sérialisation actuel ainsi que le dernier protocole de sérialisation disponible à ce moment.
Passez à la marque X sombre sur le tapis bleu, maintenant que nous avons confirmé les protocoles, nous pouvons vérifier les données stockées. Des données ont été collectées et enregistrées au fil des mois dans une constante nommée samples. Créez trois variables nommées : sereal_0, sereal_2 et sereal_5 que nous utiliserons pour vérifier trois des protocoles disponibles pour la sérialisation. Le protocole 0 est en ASCII lisible, pas très efficace, le protocole 2 est un format binaire plus efficace et le protocole 5 est le dernier avec les fonctionnalités les plus complexes ajoutées.
Nous stockerons la valeur de pickle.dumps() en passant comme arguments la constante samples et le protocol correspondant au chiffre indiqué dans le nom de la variable. Par exemple, pour sereal_0, nous définirons le protocol à 0, comme ceci : sereal_0 = pickle.dumps(samples, protocol=0). Utilisez les variables sereal_0, sereal_2 et sereal_5 avec la fonction pré-écrite display() afin de vérifier les différences de sérialisation pour chaque protocole.
Marchez jusqu'à la marque X lumineuse sur le tapis rouge et faites face au terminal, écrasez la variable output et stockez-y la valeur de pickle.loads() en passant sereal_5 en argument afin de désérialiser les données d'exemple recueillies jusqu'à présent. Utilisez la fonction display() et ajoutez la fonction pprint() avec la variable output afin de visualiser les données. Comme ceci : await player.display(pprint(output)). Notez les évaluations pour chaque mois affichées sur le terminal afin de pouvoir les tracer plus tard.
Marchez jusqu'à la marque X sombre sur le tapis rouge et faites face au bureau, sur la fonction pré-écrite write(), ajoutez les évaluations que vous avez notées pour chaque mois, qui ont été affichées précédemment sur le terminal. Ajoutez-les sous forme de chaînes de caractères entourées de "" dans l'ordre correct tel qu'ils sont indiqués dans la fonction afin de compléter le niveau.