Edistynyt Python-kehityskurssi
Luku
>
Taso

Serialisointimoduulit
Pakkausmoduulit

Tavoite

Ota viestit ja tilaukset ja pakkaa ne arkistointia ja siirtoa varten.

On olemassa useita rakennusohjeita, lähetyksiä ja manifesteja, jotka on jätetty käsiteltäväksi ja jotka täytyy siirtää tai arkistoida. Vaikka ne voisi lähettää manuaalisesti yksitellen, hyvä tapa on pakata ja purkaa tiedostot ennen tallentamista tai lähettämistä. Tätä varten voit käyttää pakkausmoduuleja tiedostokokojen pienentämiseen ja tiedon hallinnan helpottamiseen. Toisin kuin muissa ongelmissa, joissa opettelimme ja käytimme vain yhtä moduulia, voimme käyttää useita eri pakkausmoduuleja ja niiden tarjoamia funktioita. Ne ovat seuraavat:

Nopeaa pakkausnopeutta ja pientä pakkausastetta varten käytä zlib-moduulia lisäämällä import zlib. Käytämme tässä seuraavaa funktiota: zlib.compress(), joka ottaa yhden argumentin, eli pakattavan tiedon. Argumentti on annettava bytes-tyyppisenä, ei merkkijonona.

Keskinopeaan pakkausnopeuteen ja keskitasoiseen pakkausasteeseen käytä bz2-moduulia lisäämällä import bz2. Tässä käytössä käytämme seuraavia funktioita:

  • bz2.compress(), ottaa yhden argumentin, pakattavan tiedon.
  • bz2.decompress(), ottaa yhden argumentin, purettavan tiedon. Argumentti on annettava bytes-tyyppisenä, ei merkkijonona.

Argumentit on annettava bytes-tyyppisinä, ei merkkijonoina.

Suurta pakkausastetta mutta hidasta pakkausnopeutta varten käytä lzma-moduulia lisäämällä import lzma. Tässä käytössä käytämme seuraavia luokkia ja funktioita:

  • lzma.LZMACompressor(): luokka, jolla luot pakkausobjekteja ja käynnistät pakkaimen.
  • compress(): ottaa yhden argumentin, pakattavan tiedon. Argumentti on annettava bytes-tyyppisenä, ei merkkijonona.

Näiden moduulien lisäksi käytämme bytes()-funktiota, jonka avulla voit muuntaa merkkijonot tavuiksi pakkaamista varten. Funktio ottaa kaksi argumenttia: muunnettavan merkkijonon ja formaatin, joka tässä tapauksessa on 'utf-8'.

Kolme vakiomuuttujaa sisältää pakattavaa dataa: red_message, blue_message ja green_message. Aloita kävelemällä punaisen maton yllä olevalle kultaiselle X-merkille ja luo muuttuja nimeltä red_bytes. Muunna vakio red_message tavuiksi käyttämällä bytes()-funktiota formaatin ollessa 'utf-8', näin: red_bytes = bytes(red_message, 'utf-8').

Create a variable named red_compression and store the value of zlib.compress(). Käytä argumenttina red_bytes, näin: red_compression = zlib.compress(red_bytes). Kun data on pakattu, käytä valmista display()-funktiota ja lisää argumenteiksi red_message ja red_compression, jotta viesti ja pakkaustiedot näkyvät.

Mene punaisen maton yllä olevalle vaalealle X-merkille ja käänny pöytää kohti. Luo kaksi muuttujaa nimeltä message_length ja compression_length. Näihin tallennamme datan merkkimäärän ennen ja jälkeen pakkauksen käyttäen len()-funktiota. Esimerkiksi muuttujalle message_length saat red_message-muuttujan pituuden näin: message_length = len(red_message). Tee sama compression_length-muuttujalle tallentamalla red_compression-muuttujan pituus käyttämällä len()-funktiota.

Kun molemmat muuttujat on asetettu, käytä valmista write()-funktiota ja syötä argumenteiksi message_length ja compression_length varmistaaksesi pakkauskoot. Tämä havainnollistaa, kuinka paljon tiedosto pakataan verrattuna pakkaamattomaan tilaan.

Mene sinisen maton yllä olevalle tummaan X-merkille ja käänny tietokoneeseen. Luo muuttuja nimeltä blue_bytes ja muunna blue_message tavuiksi käyttäen bytes()-funktiota kuten teit red_message-muuttujan kanssa. Pakkkaa blue_message-vakio tallentamalla bz2.compress()-funktion arvo muuttujaan ja anna argumenttina blue_bytes, näin: blue_message = bz2.compress(blue_bytes).

Luo muuttuja nimeltä blue_decompress ja tallenna siihen bz2.decompress()-funktion tulos, anna argumenttina blue_message, jotta voit tarkastella tietoja purkamisen jälkeen. Lisää display()-funktioon argumenteiksi blue_message ja blue_decompress nähdäksesi viestin pakattuna ja purettuna.

Siirry vihreän maton yllä olevalle tummaan X-merkille ja luo olio nimeltä compressor, aseta siihen lzma.LZMACompressor(). Tämä luo pakkausolion, jota voit käyttää lzma-toiminnoissa. Luo muuttuja nimeltä green_bytes ja muunna green_message tavuiksi bytes()-funktiolla samalla tavalla kuin red_message ja blue_message.

Luo muuttuja nimeltä green_compression ja tallenna siihen compressor.compress()-kutsun tulos, anna argumenttina green_bytes. Tämä pakkaa viestin käyttämällä pakkausoliota. Lisää display()-funktioon argumenteiksi green_message ja green_compression nähdäksesi viestin ja pakkaustiedot.

Mene vihreän maton yllä olevalle vaalealle X-merkille ja käänny pöytää kohti, muokkaa kahta muuttujaa nimeltä message_length ja compression_length. Näihin tallennamme datan merkkimäärän ennen ja jälkeen pakkauksen käyttäen len()-funktiota. Muuttujalle message_length saat green_message-muuttujan pituuden len()-funktiolla. Tee sama compression_length-muuttujalle tallentamalla green_compression-muuttujan pituus len()-funktiolla. Kun molemmat muuttujat on asetettu, käytä valmista write()-funktiota ja anna argumenteiksi message_length ja compression_length varmistaaksesi pakkauskoot ja viimeistelläksesi tason.

Koodikirja