Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Serialiseringsmoduler
Komprimeringsmoduler
Mål
Tag beskeder og ordrer og komprimer dem til arkivering og transmission.
Der er flere konstruktionsinstruktioner, forsendelser og manifest, der er blevet indsendt og skal overføres eller arkiveres. Mens disse kan sendes ud ved manuelt at sende alt, er en god metode at komprimere og dekomprimere filer, før de opbevares eller sendes ud. For at gøre dette, kan du bruge komprimeringsmoduler til at mindske filstørrelserne 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 komprimering, brug modulet zlib ved at tilføje import zlib. Til vores formål vil vi bruge følgende funktion: zlib.compress(), der bruger et argument, som er den information, du ønsker at komprimere. Argumentet skal indtastes som bites i stedet for en streng.
For medium komprimeringshastighed og medium komprimering, brug modulet bz2 ved at tilføje import bz2. Til vores formål vil vi bruge følgende funktioner:
bz2.compress(), bruger et argument, som er den information, du ønsker at komprimere.bz2.decompress(), bruger et argument, som er den information, du ønsker at dekomprimere. Den skal indtastes som bites i stedet for en streng.
Argumenterne skal indtastes som bites i stedet for en streng.
For høj komprimering men langsom komprimeringshastighed, brug modulet lzma ved at tilføje import lzma. Til vores formål vil vi bruge følgende klasser og funktioner:
lzma.LZMACompressor(): Klasse brugt til at skabe komprimeringsobjekter, som gør det muligt at aktivere en kompressor.compress(): bruger et argument, som er den information, du ønsker at komprimere. Den skal indtastes som bites i stedet for en streng.
Ud over disse moduler, vil vi bruge funktionen bytes(), som giver dig mulighed for at konvertere strenge til bytes, hvilket vil være nyttigt for komprimering. Den tager to argumenter, den streng, du ønsker at konvertere, og formatet, som for vores formål er 'utf-8'.
Der er tre konstanter, der indeholder data, som skal komprimeres, disse hedder red_message, blue_message og green_message. For at starte, gå til det guld X-mærke over den røde løber, og opret en variabel kaldet red_bytes. Tag red_message-konstanten og konverter beskeden til bytes, så dataen kan komprimeres, ved at bruge funktionen bytes() formateret til 'utf-8', sådan her: red_bytes = bytes(red_message, 'utf-8').
Opret en variabel kaldet red_compression og gem værdien af zlib.compress(). Brug red_bytes som argument, hvilket vil komprimere dataen, således: red_compression = zlib.compress(red_bytes). Når dataen er komprimeret, brug den forudskrevne display() funktion i kodeeditoren og tilføj variablerne red_message og red_compression som argumenter for at læse beskeden og se komprimeringsdataen.
Gå til det lyse X-mærke over den røde løber og vend dig mod skrivebordet, og opret to variabler kaldet: message_length og compression_length. I disse variabler vil vi gemme tegnlængden af dataen både før og efter komprimering ved hjælp af funktionen len(). For eksempel, for message_length skal du få 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, brug den forudskrevne write() funktion og indsæt 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 er ukomprimeret.
Gå til det mørke X-mærke over den blå løber, vend dig mod computeren. Opret en variabel kaldet blue_bytes og konverter blue_message til bytes ved hjælp af funktionen bytes() på samme måde som du gjorde med red_message. Tag blue_message-konstanten og komprimer den ved at gemme værdien af bz2.compress() og indsætte blue_bytes som et argument for at komprimere dataen, således: blue_message = bz2.compress(blue_bytes).
Opret en variabel kaldet blue_decompress og gem værdien af bz2.decompress(), og tilføj blue_message som et argument for at se dataen efter dekomprimering. Tilføj variablerne blue_message og blue_decompress til den forudskrevne display() funktion for at se de komprimerede og dekomprimerede versioner af beskeddataen.
Gør dig klar til det mørke X-mærke over den grønne løber og opret et objekt kaldet compressor og fyld det med lzma.LZMACompressor(), dette vil skabe et kompressorobjekt, der kan bruges med lzma funktioner. Opret en variabel kaldet green_bytes og konverter green_message til bytes-format ved hjælp af funktionen bytes() på samme måde, som du gjorde med red_message og blue_message.
Opret en variabel kaldet green_compression og gem compressor.compress() som en værdi, og tilføj green_bytes som et argument. Dette vil give dig mulighed for at komprimere beskeddataen ved hjælp af kompressorobjektet. I den forudskrevne display() funktion, tilføj variablerne green_message og green_compression som argumenter for at se beskeden og den komprimerede data.
Gå til det lyse X-mærke over den grønne løber og vend dig mod skrivebordet, modificer de to variabler kaldet: message_length og compression_length. I disse variabler vil vi gemme tegnlængden af dataen både før og efter komprimering ved hjælp af funktionen len(). For message_length skal du få 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, brug den forudskrevne write() funktion og indsæt message_length og compression_length som argumenter for at verificere komprimeringsstørrelserne og afslutte niveauet.