Coding for KidsCoding for Kids
Luovat TasotHaasteetOpettajan Opas
Äänestä ominaisuuksia
Edistynyt Python-kehityskurssi
Luku
>
Taso

Sarjallistamismoduulit
Pakkausmoduulit

Tavoite

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

On useita rakennusohjeita, lähetyksiä ja manifesteja, jotka on toimitettu ja jotka täytyy siirtää tai arkistoida. Vaikka nämä voidaan lähettää käsin lähettämällä kaikki ulos, hyvä tapa tehdä tämä on pakata ja purkaa tiedostoja, jonka jälkeen ne voidaan tallentaa tai lähettää eteenpäin. Tätä varten voit käyttää pakkausmoduuleja pienentämään tiedostojen kokoa ja helpottamaan tiedon hallintaa. Toisin kuin muissa ongelmissa, joissa opimme ja käytimme yhtä moduulia, on olemassa useita pakkausmoduuleja, joita voimme käyttää pienen valikoiman funktioiden avulla. Ne ovat seuraavat:

Nopeaa pakkausnopeutta ja matalaa pakkaussuhdetta varten käytä zlib-moduulia lisäämällä import zlib. Meidän käyttötarkoituksiamme varten käytämme seuraavaa funktiota: zlib.compress(), joka käyttää yhtä argumenttia, kyseessä on tieto, jonka haluat pakata. Argumentin tulee olla annettu tavuina eikä merkkijonona.

Keskinopeaa pakkausta ja keskitasoista pakkaussuhdetta varten käytä bz2-moduulia lisäämällä import bz2. Meidän käyttötarkoituksiamme varten käytämme seuraavia funktioita:

  • bz2.compress(), käyttää yhtä argumenttia, joka on tieto, jonka haluat pakata.
  • bz2.decompress(), käyttää yhtä argumenttia, joka on tieto, jonka haluat purkaa. Argumentin tulee olla annettu tavuina eikä merkkijonona.

Argumentit tulee antaa tavuina eikä merkkijonona.

Korkeaa pakkaussuhdetta mutta hidasta pakkausnopeutta varten käytä lzma-moduulia lisäämällä import lzma. Meidän käyttötarkoituksiamme varten käytämme seuraavia luokkia ja funktioita:

  • lzma.LZMACompressor(): Luokka, jota käytetään pakkausobjektien luomiseen, jolloin saat pakkaimen käyttöösi.
  • compress(): käyttää yhtä argumenttia, joka on tieto, jonka haluat pakata. Argumentin tulee olla annettu tavuina eikä merkkijonona.

Näiden moduulien lisäksi käytämme funktiota bytes(), joka mahdollistaa merkkijonojen muuntamisen tavuiksi – tämä on hyödyllistä pakkaamisessa. Funktio ottaa kaksi argumenttia: muunnettavan merkkijonon ja formaatin, joka meidän tapauksessamme on 'utf-8'.

On kolme vakioita, jotka sisältävät pakattavaa dataa, nimiltään red_message, blue_message ja green_message.

Aloita kävelemällä kultaisen X-merkin luo punaisen maton yli ja luomalla muuttuja nimeltä red_bytes. Ota red_message-vakio ja muunna viesti tavuiksi, jotta data voidaan pakata, käyttämällä funktiota bytes() muodossa 'utf-8', kuten näin: red_bytes = bytes(red_message, 'utf-8').

Luo muuttuja nimeltä red_compression ja tallenna siihen zlib.compress()-funktion arvo. Käytä red_bytes-muuttujaa argumenttina, joka pakkaa datan, kuten näin: red_compression = zlib.compress(red_bytes). Kun data on pakattu, käytä valmiiksi kirjoitettua display()-funktiota koodieditorissa ja lisää argumentteina red_message ja red_compression, jotta voit lukea viestin ja nähdä pakkaustiedot.

Kävele vaalean X-merkin luo punaisen maton yli ja käänny pöydän puoleen. Luo kaksi muuttujaa nimeltä: message_length ja compression_length. Näihin muuttujiin tallennamme datan merkkimäärän sekä ennen pakkausta että pakattuna käyttäen len()-funktiota. Esimerkiksi, message_length-muuttujaan asetetaan red_message-merkkijonon pituus, kuten näin: message_length = len(red_message). Tee sama compression_length-muuttujalle tallentamalla red_compression-muuttujan pituus len()-funktion avulla.

Kun molemmat muuttujat on määritelty, käytä valmiiksi kirjoitettua write()-funktiota ja lisää argumentteina message_length ja compression_length varmistaaksesi pakkauskoot. Tämä osoittaa, kuinka paljon tiedosto on pakkautunut suhteessa siihen, kun se jätetään pakkaamattomaksi.

Kävele tumman X-merkin luo sinisen maton yli ja käänny tietokoneen puoleen. Luo muuttuja nimeltä blue_bytes ja muunna blue_message tavuiksi käyttämällä bytes()-funktiota samalla tavalla kuin teit red_message-muuttujan kanssa. Ota blue_message-vakio ja pakkaa se tallentamalla bz2.compress()-funktion arvo, käyttäen blue_bytes-muuttujaa argumenttina, kuten näin: blue_message = bz2.compress(blue_bytes).

Luo muuttuja nimeltä blue_decompress ja tallenna siihen bz2.decompress()-funktion arvo lisäämällä blue_message argumenttina, jotta voit tarkastella dataa purkamisen jälkeen. Lisää muuttujat blue_message ja blue_decompress valmiiksi kirjoitettuun display()-funktioon, jotta voit nähdä viestidatan pakatun ja purkamattoman version.

Siirry tumman X-merkin luo vihreän maton yli ja luo olio nimeltä compressor sekä määritä sille arvo lzma.LZMACompressor(). Tämä luo pakkausolion, jota voidaan käyttää lzma-funktioiden kanssa. Luo muuttuja nimeltä green_bytes ja muunna green_message tavuiksi käyttämällä bytes()-funktiota samalla tavalla kuin teit red_message- ja blue_message-muuttujien kanssa.

Luo muuttuja nimeltä green_compression ja tallenna siihen compressor.compress()-funktion arvo lisäämällä green_bytes argumenttina. Näin voit pakata viestidatan käyttäen pakkausoliota. Lisää valmiiksi kirjoitettuun display()-funktioon muuttujat green_message ja green_compression argumentteina, jotta voit nähdä viestin ja pakatun datan.

Kävele vaalean X-merkin luo vihreän maton yli ja käänny pöydän puoleen, muokkaa kahta muuttujaa nimeltä: message_length ja compression_length. Näihin muuttujiin tallennamme datan merkkimäärän sekä ennen että jälkeen pakkausta käyttäen len()-funktiota. message_length-muuttujaan asetetaan green_message-merkkijonon pituus len()-funktion avulla. Tee sama compression_length-muuttujalle tallentamalla green_compression-muuttujan pituus len()-funktion avulla. Kun molemmat muuttujat on määritelty, käytä valmiiksi kirjoitettua write()-funktiota ja lisää argumentteina message_length ja compression_length varmistaaksesi pakkauskoot ja viimeistelläksesi tason.

Koodikirja