Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau
Serialisatie-modules
Compressiemodules
Doelstelling
Neem berichten en bestellingen en comprimeer ze voor archivering en verzending.
Er zijn verschillende constructie-instructies, zendingen en manifesten ingediend die moeten worden overgedragen of gearchiveerd. Hoewel deze handmatig verstuurd kunnen worden, is een goede manier om dit te doen door bestanden te comprimeren en decomprimeren, en vervolgens op te slaan of te verzenden. Hiervoor kun je compressiemodules gebruiken om de bestandsgrootte te verkleinen en informatie makkelijker beheersbaar te maken. In tegenstelling tot andere problemen die we hebben opgelost waarbij we één enkele module leerden en gebruikten, zijn er verschillende compressiemodules die we kunnen gebruiken met een kleine selectie aan functies. Deze zijn als volgt:
Voor snelle compressiesnelheid en lage compressie, gebruik je de zlib module, door import zlib toe te voegen. Voor onze doeleinden gebruiken we de volgende functie: zlib.compress(), die één argument gebruikt, namelijk de informatie die je wilt comprimeren. Het argument moet als bytes worden ingevoerd in plaats van als een string.
Voor middelmatige compressiesnelheid en middelmatige compressie, gebruik je de bz2 module, door import bz2 toe te voegen. Voor onze doeleinden gebruiken we de volgende functies:
bz2.compress(), gebruikt één argument, namelijk de informatie die je wilt comprimeren.bz2.decompress(), gebruikt één argument, namelijk de informatie die je wilt comprimeren. Het moet als bytes worden ingevoerd in plaats van als een string.
Argumenten moeten als bytes worden ingevoerd in plaats van als een string.
Voor hoge compressie maar trage compressiesnelheid, gebruik de lzma module, door import lzma toe te voegen. Voor onze doeleinden gebruiken we de volgende klassen en functies:
lzma.LZMACompressor(): Klasse die wordt gebruikt om comprimeringsobjecten te maken waarmee je een compressor kunt activeren.compress(): gebruikt één argument, namelijk de informatie die je wilt comprimeren. Het moet als bytes worden ingevoerd in plaats van als een string. Het argument moet als bytes worden ingevoerd in plaats van als een string.
Naast deze modules gebruiken we de bytes() functie, waarmee je strings kunt omzetten naar bytes, wat handig is voor compressie. Het neemt twee argumenten: de string die je wilt converteren en het formaat, wat voor onze doeleinden 'utf-8' is.
Er zijn drie constanten die gegevens bevatten die gecomprimeerd moeten worden, te weten: red_message, blue_message en green_message. Begin door naar het gouden X-teken over het rode tapijt te lopen, en maak een variabele aan genaamd red_bytes. Neem de constante red_message en zet het bericht om in bytes zodat de gegevens gecomprimeerd kunnen worden, door de bytes() functie te gebruiken met de opmaak 'utf-8', als volgt: red_bytes = bytes(red_message, 'utf-8').
Maak een variabele aan genaamd red_compression en sla de waarde van zlib.compress() op. Gebruik red_bytes als argument, wat de gegevens zal comprimeren, als volgt: red_compression = zlib.compress(red_bytes). Zodra de gegevens zijn gecomprimeerd, gebruik je de vooraf geschreven display() functie in de code-editor en voeg je de variabelen red_message en red_compression toe als argumenten om het bericht te lezen en de compressiegegevens te bekijken.
Loop naar het lichte X-teken over het rode tapijt en richt je op het bureau, en maak twee variabelen aan genaamd: message_length en compression_length. In deze variabelen slaan we de tekenlengte van de gegevens op, zowel voor als na compressie, met behulp van de len() functie. Bijvoorbeeld, voor message_length haal je de lengte van red_message op, als volgt: message_length = len(red_message). Doe hetzelfde voor compression_length door de len() van red_compression op te slaan.
Zodra beide variabelen zijn ingevuld, gebruik je de vooraf geschreven write() functie en voeg je message_length en compression_length toe als argumenten om de compressiegroottes te verifiëren. Dit toont aan hoeveel het bestand is gecomprimeerd ten opzichte van wanneer het oncomprimeerd is.
Loop naar het donkere X-teken over het blauwe tapijt, richt je op de computer. Maak een variabele aan genaamd blue_bytes en zet blue_message om in bytes met behulp van de bytes() functie op dezelfde manier als je bij red_message deed. Neem de constante blue_message en comprimeer deze door de waarde van bz2.compress() op te slaan en blue_bytes als argument in te voeren om de gegevens te comprimeren, als volgt: blue_message = bz2.compress(blue_bytes).
Maak een variabele aan genaamd blue_decompress en sla de waarde van bz2.decompress() op, en voeg blue_message als argument toe om de gegevens na decompressie te bekijken. Voeg de variabelen blue_message en blue_decompress toe aan de vooraf geschreven display() functie om de gecomprimeerde en gedecomprimeerde varianten van de berichtgegevens te bekijken.
Ga naar het donkere X-teken over het groene tapijt en maak een object aan genaamd compressor en vul dit met lzma.LZMACompressor(), dit zal een compressor-object creëren dat gebruikt kan worden met lzma functies. Maak een variabele aan genaamd green_bytes en zet green_message om naar bytes-formaat met de bytes() functie op dezelfde manier als je bij red_message en blue_message deed.
Maak een variabele aan genaamd green_compression en sla compressor.compress() op als waarde, waarbij je green_bytes als argument toevoegt. Hiermee kun je de berichtgegevens comprimeren met het compressor-object. Voeg in de vooraf geschreven display() functie de variabelen green_message en green_compression toe als argumenten om het bericht en de gecomprimeerde gegevens te bekijken.
Loop naar het lichte X-teken over het groene tapijt en richt je op het bureau, en pas de twee variabelen genaamd message_length en compression_length aan. In deze variabelen slaan we de tekenlengte van de gegevens op, zowel voor als na compressie, met behulp van de len() functie. Voor message_length haal je de lengte van green_message op met len(). Doe hetzelfde voor compression_length door de len() van green_compression op te slaan. Zodra beide variabelen zijn ingevuld, gebruik je de vooraf geschreven write() functie en voeg je message_length en compression_length toe als argumenten om de compressiegroottes te verifiëren en het level af te ronden.