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 continuant sur 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 efficace comme solution généraliste, 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, ce qui est 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, ce qui est idéal pour les structures de données plus volumineuses 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 en un format binaire, conçu pour la rapidité dans 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 les données binaires en types de données compréhensibles 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 pour la sérialisation avec Pickle est par défaut dans votre version de Python. Les protocoles influencent la manière dont les données sont sérialisées.pickle.HIGHEST_PROTOCOL: Vérifie quelle version de protocole pour la sérialisation avec Pickle est la plus élevée disponible dans votre version de Python. Les protocoles influencent la manière 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 à sérialiser et la version du protocole que vous souhaitez utiliser pour la sérialisation.pickle.loads(): Désérialise des données binaires en types de données compréhensibles par Python, puissant 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é pformat, que nous importerons avec from pprint import pformat. Cela nous permet d'utiliser la fonction pformat() qui peut servir à formater des structures de données telles que des dictionnaires, nous permettant ainsi d'afficher l'information de manière claire.
Pour commencer, rendez-vous vers 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 à proximité qui est en cours de développement pour la culture de plantes. 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 obtenue en appelant la fonction marshal.dumps() avec reading comme argument. Comme ceci : data = marshal.dumps(reading). Utilisez la variable data avec la fonction pré-écrite display() pour visualiser les données sérialisées.
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. Rendez-vous ensuite à la marque X lumineuse devant le 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 comme argument. Utilisez la fonction write() en ajoutant output comme argument pour accéder aux données sérialisées que vous avez collectées de la station de surveillance.
Rendez-vous à la marque X lumineuse sur le tapis bleu dans le bureau, et 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 à la fois le protocole de sérialisation actuel et le dernier protocole de sérialisation disponible à ce moment.
Dirigez-vous vers la marque X sombre sur le tapis bleu, maintenant que nous avons confirmé les protocoles, nous pouvons vérifier les données stockées. Les données ont été collectées et stocké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, peu efficace, le protocole 2 est un format binaire plus efficace et le protocole 5 est le plus récent 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 numéro 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.
Rendez-vous à 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 comme argument afin de désérialiser les données d'échantillon collectées jusqu'à présent. Utilisez la fonction display() et ajoutez la fonction pformat() avec la variable output pour visualiser les données. Comme ceci : await player.display(pformat(output)). Notez les évaluations pour chaque mois affichées sur le terminal afin de pouvoir les noter plus tard.
Rendez-vous à la marque X sombre sur le tapis rouge et faites face au bureau, dans 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 en tant que chaînes de caractères entourées de "" dans l'ordre correct tel qu'ils sont indiqués dans la fonction afin de terminer le niveau.