Cours de développement Python avancé
Chapitre
>
Niveau
Modules de sérialisation
Modules de compression
Objectif
Prenez des messages et des ordres et compressez-les pour archivage et transmission.
Il existe plusieurs instructions de construction, expéditions et manifestes qui ont été soumis et doivent être transférés ou archivés. Bien que ceux-ci puissent être envoyés manuellement, une bonne méthode consiste à compresser et décompresser des fichiers avant de les stocker ou de les expédier. Pour ce faire, vous pouvez utiliser des modules de compression pour réduire la taille des fichiers et faciliter la gestion des informations. Contrairement à d'autres problèmes que nous avons résolus où nous avons appris et utilisé un module unique, il existe plusieurs modules de compression que nous pouvons utiliser avec un petit choix de fonctions. Les voici :
Pour une vitesse de compression rapide et une compression faible, utilisez le module zlib, en ajoutant import zlib. Pour nos besoins, nous utiliserons la fonction suivante : zlib.compress(), qui prend un argument, à savoir les informations que vous souhaitez compresser. L'argument doit être fourni sous forme d'octets plutôt que sous forme de chaîne.
Pour une vitesse de compression moyenne et une compression moyenne, utilisez le module bz2, en ajoutant import bz2. Pour nos besoins, nous utiliserons les fonctions suivantes :
bz2.compress(), qui prend un argument, à savoir les informations que vous souhaitez compresser.bz2.decompress(), qui prend un argument, à savoir les informations que vous souhaitez décompresser. Il doit être fourni sous forme d'octets plutôt que sous forme de chaîne.
Les arguments doivent être fournis sous forme d'octets plutôt que sous forme de chaîne.
Pour une forte compression mais une vitesse lente, utilisez le module lzma, en ajoutant import lzma. Pour nos besoins, nous utiliserons les classes et fonctions suivantes :
lzma.LZMACompressor(): classe utilisée pour créer des objets de compression permettant d'activer un compresseur.compress(): qui prend un argument, à savoir les informations que vous souhaitez compresser. Il doit être fourni sous forme d'octets plutôt que sous forme de chaîne. L'argument doit être fourni sous forme d'octets plutôt que sous forme de chaîne.
De plus, nous utiliserons la fonction bytes() qui vous permet de convertir des chaînes en octets, ce qui sera utile pour la compression. Elle prend deux arguments : la chaîne que vous souhaitez convertir et le format, qui pour nos besoins est 'utf-8'.
Il existe trois constantes contenant des données à compresser, nommées red_message, blue_message et green_message. Pour commencer, rendez-vous à la marque X dorée sur le tapis rouge et créez une variable nommée red_bytes. Prenez la constante red_message et convertissez le message en octets afin de pouvoir compresser les données, en utilisant la fonction bytes() au format 'utf-8', comme ceci : red_bytes = bytes(red_message, 'utf-8').
Créez une variable nommée red_compression et stockez-y la valeur de zlib.compress(). Utilisez red_bytes comme argument pour compresser les données, comme ceci : red_compression = zlib.compress(red_bytes). Une fois les données compressées, utilisez la fonction display() pré-écrite dans l'éditeur de code et ajoutez les variables red_message et red_compression en tant qu'arguments afin de lire le message et d'afficher les données de compression.
Rendez-vous à la marque X claire sur le tapis rouge, face au bureau, et créez deux variables nommées : message_length et compression_length. Dans ces variables, nous stockerons la longueur en caractères des données avant et après compression en utilisant la fonction len(). Par exemple, pour message_length, obtenez la longueur de red_message, comme ceci : message_length = len(red_message). Faites de même pour compression_length en stockant la valeur de len(red_compression).
Une fois les deux variables remplies, utilisez la fonction write() pré-écrite et insérez message_length et compression_length comme arguments afin de vérifier les tailles de compression. Cela démontre l'ampleur de la compression par rapport à la taille non compressée.
Rendez-vous à la marque X sombre sur le tapis bleu, face à l'ordinateur. Créez une variable nommée blue_bytes et convertissez blue_message en octets à l'aide de la fonction bytes() de la même manière que pour red_message. Prenez la constante blue_message et compressez-la en stockant la valeur de bz2.compress() et en insérant blue_bytes comme argument pour compresser les données, comme ceci : blue_message = bz2.compress(blue_bytes).
Créez une variable nommée blue_decompress et stockez-y la valeur de bz2.decompress(), en ajoutant blue_message comme argument afin de visualiser les données après décompression. Ajoutez les variables blue_message et blue _decompress à la fonction display() pré-écrite afin de voir les versions compressée et décompressée des données du message.
Rendez-vous à la marque X sombre sur le tapis vert et créez un objet nommé compressor en l'initialisant avec lzma.LZMACompressor() ; cela créera un objet compresseur utilisable avec les fonctions lzma. Créez une variable nommée green_bytes et transformez green_message en octets à l'aide de la fonction bytes() de la même manière que pour red_message et blue message.
Créez une variable nommée green_compression et stockez-y le résultat de compressor.compress() en passant green_bytes comme argument. Cela vous permettra de compresser les données du message à l'aide de l'objet compresseur. Dans la fonction display() pré-écrite, ajoutez les variables green_message et green_compression comme arguments afin de visualiser le message et les données comprimées.
Rendez-vous à la marque X claire sur le tapis vert, face au bureau, et modifiez les deux variables nommées : message_length et compression_length. Dans ces variables, nous stockerons la longueur en caractères des données avant et après compression en utilisant la fonction len(). Pour message_length, obtenez la longueur de green_message avec len(). Faites de même pour compression_length en stockant la valeur de len(green_compression). Une fois les deux variables remplies, utilisez la fonction write() pré-écrite et insérez message_length et compression_length comme arguments afin de vérifier les tailles de compression et de terminer le niveau.