Cours avancé de développement Python
Chapitre
>
Niveau
Modules de sérialisation
Modules de compression
Objectif
Prenez des messages et des ordres et compressez-les afin de les archiver et de les transmettre.
Il existe plusieurs instructions de construction, expéditions et manifestes qui ont été soumis et qui doivent être transférés ou archivés. Bien que ceux-ci puissent être envoyés manuellement, une bonne manière de le faire est de compresser et de décompresser des fichiers avant de les stocker ou de les envoyer. Pour ce faire, vous pouvez utiliser des modules de compression afin de diminuer la taille des fichiers et de faciliter la gestion des informations. Contrairement à d'autres problèmes que nous avons résolus, où nous avons appris et utilisé un seul module, il existe plusieurs modules de compression que nous pouvons utiliser avec une petite sélection de fonctions. Ils sont les suivants:
Pour une compression rapide et une faible compression, utilisez le module zlib, en ajoutant import zlib. Pour notre cas, nous utiliserons la fonction suivante: zlib.compress(), qui utilise un argument, à savoir l'information que vous souhaitez compresser. L'argument doit être entré en bites au lieu d'une chaîne de caractères.
Pour une vitesse de compression moyenne et une compression moyenne, utilisez le module bz2, en ajoutant import bz2. Pour notre cas, nous utiliserons les fonctions suivantes:
bz2.compress(), utilise un argument, à savoir l'information que vous souhaitez compresser.bz2.decompress(), utilise un argument, à savoir l'information que vous souhaitez compresser. Il doit être entré en bites au lieu d'une chaîne de caractères.
Les arguments doivent être entrés en bites au lieu d'une chaîne de caractères.
Pour une compression élevée mais à une vitesse de compression lente, utilisez le module lzma, en ajoutant import lzma. Pour notre cas, nous utiliserons les classes et fonctions suivantes:
lzma.LZMACompressor(): Classe utilisée pour créer des objets de compression vous permettant d'activer un compresseur.compress(): utilise un argument, à savoir l'information que vous souhaitez compresser. Il doit être entré en bites au lieu d'une chaîne de caractères.
En plus de ces modules, nous utiliserons la fonction bytes(), qui vous permet de convertir des chaînes de caractères en bites, ce qui sera utile pour la compression. Elle prend deux arguments, la chaîne que vous souhaitez convertir et le format, qui dans notre cas est 'utf-8'.
Il y a trois constantes contenant des données qui doivent être compressées, nommées red_message, blue_message et green_message. Pour commencer, marchez vers la marque X en or sur le tapis rouge, créez une variable nommée red_bytes. Prenez la constante red_message et convertissez le message en bites afin que les données puissent être compressées, en utilisant la fonction bytes() formatée en 'utf-8', comme ceci: red_bytes = bytes(red_message, 'utf-8').
Créez une variable nommée red_compression et stockez la valeur de zlib.compress(). Utilisez red_bytes comme argument qui permettra de compresser les données, comme ceci: red_compression = zlib.compress(red_bytes). Une fois les données compressées, utilisez la fonction pré-écrite display() dans l'éditeur de code et ajoutez les variables red_message et red_compression en tant qu'arguments afin de lire le message et voir les données de compression.
Marchez vers la marque X claire sur le tapis rouge et faites face au bureau, 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 le len() de red_compression.
Une fois que les deux variables ont été remplies, utilisez la fonction pré-écrite write() et insérez message_length et compression_length en tant qu'arguments afin de vérifier les tailles de compression. Cela démontre combien le fichier est compressé par rapport à son état non compressé.
Marchez vers la marque X sombre sur le tapis bleu, facez l'ordinateur. Créez une variable nommée blue_bytes et convertissez blue_message en bites en utilisant la fonction bytes() de la même manière que vous l'avez fait avec red_message. Prenez la constante blue_message et compressez-la en stockant la valeur de bz2.compress() et en insérant blue_bytes en tant qu'argument pour compresser les données, comme ceci: blue_message = bz2.compress(blue_bytes).
Créez une variable nommée blue_decompress et stockez la valeur de bz2.decompress() en ajoutant blue_message en tant qu'argument pour visualiser les données après décompression. Ajoutez les variables blue_message et blue_decompress à la fonction pré-écrite display() afin de visualiser les variantes compressées et décompressées des données du message.
Dirigez-vous vers la marque X sombre sur le tapis vert et créez un objet nommé compressor que vous initialiserez avec lzma.LZMACompressor(). Cela créera un objet compresseur qui pourra être utilisé avec les fonctions de lzma. Créez une variable nommée green_bytes et transformez green_message en format bites en utilisant la fonction bytes() de la même manière que vous l'avez fait avec red_message et blue_message.
Créez une variable nommée green_compression et stockez la valeur de compressor.compress(), en ajoutant green_bytes comme argument. Cela vous permettra de compresser les données du message en utilisant l'objet compresseur. Dans la fonction pré-écrite display(), ajoutez les variables green_message et green_compression en tant qu'arguments afin de visualiser le message et les données compressées.
Marchez vers la marque X claire sur le tapis vert et faites face au bureau, 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 le len() de green_compression. Une fois que les deux variables ont été remplies, utilisez la fonction pré-écrite write() et insérez message_length et compression_length en tant qu'arguments afin de vérifier les tailles de compression et terminer le niveau.