Coding for KidsCoding for Kids
Kreativa NivåerUtmaningarLärarguide
Rösta på funktioner
Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå

Serialiseringsmoduler
Kompressionsmoduler

Mål

Ta meddelanden och order och komprimera dem för arkivering och överföring.

Det finns flera konstruktionsinstruktioner, leveranser och manifest som har skickats in och som behöver överföras eller arkiveras. Även om dessa kan skickas ut genom att manuellt skicka ut allt, är ett bra sätt att göra detta att komprimera och dekomprimera filer och därefter lagra eller skicka ut dem. För att göra detta kan du använda komprimeringsmoduler för att minska filstorlekarna och göra informationen lättare att hantera. Till skillnad från andra problem vi löste där vi lärde oss och använde en enda modul, finns det flera komprimeringsmoduler vi kan använda med ett litet urval av funktioner. Dessa är följande:

För snabb komprimeringshastighet och låg kompression, använd zlib-modulen, genom att lägga till import zlib. För våra ändamål kommer vi att använda följande funktion: zlib.compress(), som använder ett argument, nämligen den information du vill komprimera. Argumentet måste anges som bytes istället för en sträng.

För medelhög komprimeringshastighet och medelhög kompression, använd bz2-modulen, genom att lägga till import bz2. För våra ändamål kommer vi att använda följande funktioner:

  • bz2.compress(), använder ett argument, nämligen den information du vill komprimera.
  • bz2.decompress(), använder ett argument, nämligen den information du vill dekomprimera. Det måste anges som bytes istället för en sträng.

Argumenten måste anges som bytes istället för en sträng.

För hög kompression men långsam komprimeringshastighet, använd lzma-modulen, genom att lägga till import lzma. För våra ändamål kommer vi att använda följande klasser och funktioner:

  • lzma.LZMACompressor(): Klass som används för att skapa komprimeringsobjekt som låter dig aktivera en kompressor.
  • compress(): använder ett argument, nämligen den information du vill komprimera. Det måste anges som bytes istället för en sträng. Argumentet måste anges som bytes istället för en sträng.

Förutom dessa moduler kommer vi att använda funktionen bytes(), som låter dig konvertera strängar till bytes vilket kommer att vara användbart för komprimering. Den tar två argument, strängen du vill konvertera och formatet, vilket för våra ändamål är 'utf-8'.

Det finns tre konstanter som innehåller data som behöver komprimeras, dessa är namngivna red_message, blue_message och green_message. För att börja, gå till den gyllene X-markeringen över den röda mattan och skapa en variabel som heter red_bytes. Ta red_message-konstanten och konvertera meddelandet till bytes så att datan kan komprimeras, genom att använda funktionen bytes() med formatet 'utf-8', på följande sätt: red_bytes = bytes(red_message, 'utf-8').

Skapa en variabel som heter red_compression och lagra värdet av zlib.compress(). Använd red_bytes som argument, vilket kommer att komprimera datan, på följande sätt: red_compression = zlib.compress(red_bytes). När datan har komprimerats, använd den fördefinierade funktionen display() i kodredigeraren och lägg till variablerna red_message och red_compression som argument för att läsa meddelandet och se komprimeringsdatan.

Gå till den ljusa X-markeringen över den röda mattan och vänd dig mot skrivbordet, skapa två variabler med namnen: message_length och compression_length. I dessa variabler kommer vi att lagra teckenlängden på datan både innan och efter komprimering med hjälp av funktionen len(). Till exempel, för message_length, hämta längden på red_message, på följande sätt: message_length = len(red_message). Gör samma sak för compression_length genom att lagra len() av red_compression.

När båda variablerna har fyllts, använd den fördefinierade funktionen write() och ange message_length och compression_length som argument för att kontrollera storleken på komprimeringen. Detta visar hur mycket filen är komprimerad jämfört med när den lämnas okomprimerad.

Gå till den mörka X-markeringen över den blå mattan, vänd dig mot datorn. Skapa en variabel som heter blue_bytes och konvertera blue_message till bytes med hjälp av funktionen bytes() på samma sätt som du gjorde med red_message. Ta blue_message-konstanten och komprimera den genom att lagra värdet av bz2.compress() och infoga blue_bytes som ett argument för att komprimera datan, på följande sätt: blue_message = bz2.compress(blue_bytes).

Skapa en variabel som heter blue_decompress och lagra värdet av bz2.decompress() och lägg till blue_message som argument för att se datan efter dekomprimering. Lägg till variablerna blue_message och blue_decompress till den fördefinierade funktionen display() för att visa de komprimerade och dekomprimerade varianterna av meddelandedatan.

Fortsätt mot den mörka X-markeringen över den gröna mattan och skapa ett objekt som heter compressor och fyll det med lzma.LZMACompressor(), detta kommer att skapa ett komprimeringsobjekt som kan användas med lzma-funktioner. Skapa en variabel som heter green_bytes och omvandla green_message till bytesformat med hjälp av funktionen bytes() på samma sätt som du gjorde med red_message och blue_message.

Skapa en variabel som heter green_compression och lagra compressor.compress() som ett värde, genom att lägga till green_bytes som en variabel. Detta gör att du kan komprimera meddelandedatan med hjälp av kompressorobjektet. Till den fördefinierade funktionen display(), lägg till variablerna green_message och green_compression som argument för att visa meddelandet och den komprimerade datan.

Gå till den ljusa X-markeringen över den gröna mattan och vänd dig mot skrivbordet, ändra de två variablerna med namnen: message_length och compression_length. I dessa variabler kommer vi att lagra teckenlängden på datan både före och efter komprimering med hjälp av funktionen len(). För message_length hämta längden på green_message med len(). Gör samma sak för compression_length genom att lagra len() av green_compression. När båda variablerna har fyllts, använd den fördefinierade funktionen write() och ange message_length och compression_length som argument för att verifiera komprimeringsstorlekarna och avsluta nivån.

Kodbok