Fortgeschrittener Python-Entwicklungskurs
Kapitel
>
Stufe
Serialisierungs-Module
Kompressionsmodule
Ziel
Komprimiere Nachrichten und Befehle zum Archivieren und Übertragen.
Es gibt mehrere Bauanleitungen, Sendungen und Frachtbriefe, die eingereicht wurden und übertragen oder archiviert werden müssen. Während diese manuell versendet werden könnten, ist eine gute Methode, dies zu tun, Dateien zu komprimieren und zu dekomprimieren, bevor sie gespeichert oder verschickt werden. Dazu kannst du Komprimierungs-Module verwenden, um Dateigrößen zu reduzieren und die Verwaltung der Informationen zu erleichtern. Im Gegensatz zu anderen Problemen, bei denen wir ein einzelnes Modul gelernt und verwendet haben, gibt es mehrere Komprimierungs-Module, die wir mit einer kleinen Auswahl an Funktionen verwenden können. Diese sind wie folgt:
Für schnelle Komprimierungsgeschwindigkeit und geringe Kompression verwende das zlib-Modul, indem du import zlib hinzufügst. Für unsere Zwecke werden wir die folgende Funktion verwenden: zlib.compress(), die ein Argument benutzt, nämlich die Information, die du komprimieren möchtest. Das Argument muss als Bytes eingegeben werden, statt als String.
Für mittlere Komprimierungsgeschwindigkeit und mittlere Kompression verwende das bz2-Modul, indem du import bz2 hinzufügst. Für unsere Zwecke werden wir die folgenden Funktionen verwenden:
bz2.compress(), verwendet ein Argument, nämlich die Information, die du komprimieren möchtest.bz2.decompress(), verwendet ein Argument, nämlich die Information, die du dekomprimieren möchtest. Es muss als Bytes eingegeben werden, statt als String.
Die Argumente müssen als Bytes eingegeben werden, statt als String.
Für hohe Kompression, aber langsame Komprimierungsgeschwindigkeit, verwende das lzma-Modul, indem du import lzma hinzufügst. Für unsere Zwecke werden wir die folgenden Klassen und Funktionen verwenden:
lzma.LZMACompressor(): Klasse, die verwendet wird, um Komprimierungsobjekte zu erstellen, mit denen du einen Kompressor aktivieren kannst.compress(): verwendet ein Argument, nämlich die Information, die du komprimieren möchtest. Es muss als Bytes eingegeben werden, statt als String. Das Argument muss als Bytes eingegeben werden.
Zusätzlich zu diesen Modulen verwenden wir die Funktion bytes(), die es dir ermöglicht, Strings in Bytes zu konvertieren, was für die Komprimierung nützlich ist. Sie nimmt zwei Argumente entgegen: den String, den du konvertieren möchtest, und das Format, welches in unserem Fall 'utf-8' ist.
Es gibt drei Konstanten, die Daten enthalten, die komprimiert werden müssen. Diese heißen red_message, blue_message und green_message. Um zu beginnen, gehe zum goldenen X-Mark auf dem roten Teppich, erstelle eine Variable namens red_bytes. Nimm die Konstante red_message und konvertiere die Nachricht in Bytes, damit die Daten komprimiert werden können, indem du die Funktion bytes() mit dem Format 'utf-8' verwendest, wie folgt: red_bytes = bytes(red_message, 'utf-8').
Erstelle eine Variable namens red_compression und speichere den Wert von zlib.compress() darin. Verwende red_bytes als Argument, das die Daten komprimiert, wie folgt: red_compression = zlib.compress(red_bytes). Sobald die Daten komprimiert wurden, benutze die vorgegebene display()-Funktion im Code-Editor und füge die Variablen red_message und red_compression als Argumente hinzu, um die Nachricht zu lesen und die Komprimierungsdaten anzuzeigen.
Gehe zum hellen X-Mark auf dem roten Teppich und wende dich dem Schreibtisch zu, erstelle zwei Variablen namens message_length und compression_length. In diesen Variablen speichern wir die Zeichenlänge der Daten sowohl vor als auch nach der Komprimierung mithilfe der len()-Funktion. Zum Beispiel, für message_length erhalte die Länge von red_message, so: message_length = len(red_message). Mach dasselbe für compression_length, indem du die len() von red_compression speicherst.
Sobald beide Variablen befüllt sind, benutze die vorgegebene write()-Funktion und füge message_length und compression_length als Argumente ein, um die Komprimierungsgrößen zu überprüfen. Dies zeigt, wie stark die Datei im Vergleich zum unkomprimierten Zustand komprimiert wurde.
Gehe zum dunklen X-Mark auf dem blauen Teppich und wende dich dem Computer zu. Erstelle eine Variable namens blue_bytes und konvertiere blue_message in Bytes mit der bytes()-Funktion, genauso wie du es mit red_message gemacht hast. Nimm die Konstante blue_message und komprimiere sie, indem du den Wert von bz2.compress() speicherst und blue_bytes als Argument zur Komprimierung der Daten einfügst, so: blue_message = bz2.compress(blue_bytes).
Erstelle eine Variable namens blue_decompress und speichere den Wert von bz2.decompress(), füge blue_message als Argument hinzu, um die Daten nach der Dekomprimierung anzuzeigen. Füge der vorgegebenen display()-Funktion die Variablen blue_message und blue_decompress als Argumente hinzu, um die komprimierte und dekomprimierte Variante der Nachrichtendaten anzuzeigen.
Begebe dich zum dunklen X-Mark auf dem grünen Teppich und erstelle ein Objekt namens compressor und fülle es mit lzma.LZMACompressor(). Dadurch wird ein Kompressor-Objekt erstellt, das mit den lzma-Funktionen verwendet werden kann. Erstelle eine Variable namens green_bytes und verwandle green_message in das Bytes-Format, indem du die Funktion bytes() genauso wie bei red_message und blue_message verwendest.
Erstelle eine Variable namens green_compression und speichere den Wert von compressor.compress(), indem du green_bytes als Argument hinzufügst. Dies ermöglicht es dir, die Nachrichtendaten mithilfe des Kompressor-Objekts zu komprimieren. Füge der vorgegebenen display()-Funktion die Variablen green_message und green_compression als Argumente hinzu, um die Nachricht und die komprimierten Daten anzuzeigen.
Gehe zum hellen X-Mark auf dem grünen Teppich und wende dich dem Schreibtisch zu, modifiziere die beiden Variablen message_length und compression_length. In diesen Variablen speichern wir die Zeichenlänge der Daten sowohl vor als auch nach der Komprimierung mithilfe der len()-Funktion. Für message_length erhalte die Länge von green_message mit len(). Mache dasselbe für compression_length, indem du die len() von green_compression speicherst. Sobald beide Variablen befüllt sind, benutze die vorgegebene write()-Funktion und füge message_length und compression_length als Argumente ein, um die Komprimierungsgrößen zu überprüfen und das Level abzuschließen.