Avanceret Python-udviklingskursus
Kapitel
>
Niveau

Serialiseringsmoduler
Komprimeringsmoduler

Mål

Tag beskeder og ordrer og komprimer dem til arkivering og overførsel.

Der er flere konstruktionsinstruktioner, forsendelser og manifester, som er blevet indsendt og skal overføres eller arkiveres. Selvom disse kan udsendes ved manuelt at sende alting, er en god måde at gøre dette på at komprimere og dekomprimere filer, hvorefter de gemmes eller sendes. For at gøre dette kan du bruge komprimeringsmoduler til at formindske filstørrelser og gøre information lettere at håndtere. I modsætning til andre problemer, vi løste, hvor vi lærte og brugte et enkelt modul, er der flere komprimeringsmoduler, vi kan bruge med et lille udvalg af funktioner. De er som følger:

For hurtig komprimeringshastighed og lav kompression brug zlib-modulet ved at tilføje import zlib. Til vores formål vil vi bruge følgende funktion: zlib.compress(), som bruger ét argument, nemlig den information, du ønsker at komprimere. Argumentet skal indtastes som bites i stedet for en streng.

For medium komprimeringshastighed og medium kompression brug bz2-modulet ved at tilføje import bz2. Til vores formål vil vi bruge følgende funktioner:

  • bz2.compress(), bruger ét argument, nemlig den information, du ønsker at komprimere.
  • bz2.decompress(), bruger ét argument, nemlig den information, du ønsker at dekomprimere. Den skal indtastes som bites i stedet for en streng.

Argumenter skal indtastes som bites i stedet for en streng.

For høj kompression men langsom komprimeringshastighed brug lzma-modulet ved at tilføje import lzma. Til vores formål vil vi bruge følgende klasser og funktioner:

  • lzma.LZMACompressor(): Klasse der bruges til at oprette komprimeringsobjekter, som giver dig mulighed for at aktivere en kompressor.
  • compress(): bruger ét argument, nemlig den information, du ønsker at komprimere. Den skal indtastes som bites i stedet for en streng. Argumentet skal indtastes som bites i stedet for en streng.

Derudover vil vi bruge bytes()-funktionen, som lader dig konvertere strenge til bytes, hvilket er nyttigt til komprimering. Den tager to argumenter: den streng, du ønsker at konvertere, og formatet, som til vores formål er 'utf-8'.

Der er tre konstanter, der indeholder data, som skal komprimeres, nemlig red_message, blue_message og green_message. For at starte går du hen til det gyldne X-mærke over det røde tæppe, og opretter en variabel med navnet red_bytes. Tag konstanten red_message og omdann beskeden til bytes, så dataene kan komprimeres, ved hjælp af bytes()-funktionen formateret til 'utf-8', som sådan: red_bytes = bytes(red_message, 'utf-8').

Opret en variabel med navnet red_compression og gem værdien af zlib.compress(). Brug red_bytes som argument for at komprimere dataene, sådan her: red_compression = zlib.compress(red_bytes). Når dataene er komprimeret, skal du bruge den foruddefinerede display()-funktion i kodeeditoren og tilføje variablerne red_message og red_compression som argumenter for at læse beskeden og se komprimeringsdataene.

Gå hen til det lyse X-mærke over det røde tæppe og vend dig mod skrivebordet, opret to variabler med navnene message_length og compression_length. I disse variabler gemmer vi tegnlængden af dataene både før og efter komprimering ved hjælp af len()-funktionen. For eksempel for message_length får du længden af red_message sådan her: message_length = len(red_message). Gør det samme for compression_length ved at gemme len() af red_compression.

Når begge variabler er udfyldt, skal du bruge den foruddefinerede write()-funktion og indsætte message_length og compression_length som argumenter for at verificere komprimeringsstørrelserne. Dette demonstrerer, hvor meget filen er komprimeret i forhold til, når den ikke er komprimeret.

Gå hen til det mørke X-mærke over det blå tæppe, vend dig mod computeren. Opret en variabel med navnet blue_bytes og konverter blue_message til bytes ved hjælp af bytes()-funktionen på samme måde som med red_message. Tag konstanten blue_message og komprimer den ved at gemme værdien af bz2.compress() og indsætte blue_bytes som argument for at komprimere dataene, sådan her: blue_message = bz2.compress(blue_bytes).

Opret en variabel med navnet blue_decompress og gem værdien af bz2.decompress() og tilføj blue_message som argument for at se dataene efter dekomprimering. Tilføj variablerne blue_message og blue_decompress til den foruddefinerede display()-funktion for at se komprimerede og dekomprimerede varianter af beskeddataene.

Gå hen til det mørke X-mærke over det grønne tæppe og opret et objekt med navnet compressor og tildel det lzma.LZMACompressor(). Dette vil oprette et kompressorobjekt, der kan bruges med lzma-funktioner. Opret en variabel med navnet green_bytes og konverter green_message til bytes ved hjælp af bytes()-funktionen på samme måde som med red_message og blue_message.

Opret en variabel med navnet green_compression og gem compressor.compress() som værdi, idet du tilføjer green_bytes som argument. Dette giver dig mulighed for at komprimere beskeddataene ved hjælp af kompressorobjektet. I den foruddefinerede display()-funktion tilføjer du variablerne green_message og green_compression som argumenter for at se beskeden og de komprimerede data.

Gå hen til det lyse X-mærke over det grønne tæppe og vend dig mod skrivebordet, og tilpas de to variabler med navnene message_length og compression_length. I disse variabler gemmer vi tegnlængden af dataene både før og efter komprimering ved hjælp af len()-funktionen. For message_length får du længden af green_message med len(). Gør det samme for compression_length ved at gemme len() af green_compression. Når begge variabler er udfyldt, skal du bruge den foruddefinerede write()-funktion og indsætte message_length og compression_length som argumenter for at verificere komprimeringsstørrelserne og afslutte level'et.

Kodebog