Coding for KidsCoding for Kids
Livelli CreativiSfideGuida per Insegnanti
Vota per le funzionalità
Corso Avanzato di Sviluppo Python
Capitolo
>
Livello

Serialization-moduli
Moduli di Compressione

Obiettivo

Prendi i messaggi e gli ordini e comprimili per l'archiviazione e la trasmissione.

Ci sono diverse istruzioni di costruzione, spedizioni e manifesti che sono stati inviati e devono essere trasferiti o archiviati. Sebbene questi possano essere inviati manualmente, un buon modo per farlo è comprimere e decomprimere i file per poi conservarli o inviarli. Per fare ciò, puoi utilizzare moduli di compressione per diminuire le dimensioni dei file e rendere le informazioni più facili da gestire. A differenza di altri problemi che abbiamo risolto in cui abbiamo imparato e utilizzato un singolo modulo, ce ne sono diversi che possiamo usare con una piccola selezione di funzioni. Essi sono i seguenti:

Per una velocità di compressione rapida e una bassa compressione, usa il modulo zlib, aggiungendo import zlib. Per i nostri scopi useremo la seguente funzione: zlib.compress(), che utilizza un argomento, ovvero l'informazione che desideri comprimere. L'argomento deve essere fornito come byte anziché come stringa.

Per una velocità di compressione media e una compressione media, usa il modulo bz2, aggiungendo import bz2. Per i nostri scopi useremo le seguenti funzioni:

  • bz2.compress(), che utilizza un argomento, ovvero l'informazione che desideri comprimere.
  • bz2.decompress(), che utilizza un argomento, ovvero l'informazione che desideri comprimere. Deve essere fornito come byte anziché come stringa.

Gli argomenti devono essere forniti come byte anziché come stringa.

Per una compressione elevata ma con una velocità di compressione lenta, usa il modulo lzma, aggiungendo import lzma. Per i nostri scopi useremo le seguenti classi e funzioni:

  • lzma.LZMACompressor(): Classe usata per creare oggetti di compressione che ti permettono di attivare un compressore.
  • compress(): utilizza un argomento, ovvero l'informazione che desideri comprimere. Deve essere fornito come byte anziché come stringa. L'argomento deve essere fornito come byte anziché come stringa.

Oltre a questi moduli, utilizzeremo la funzione bytes(), che ti permette di convertire le stringhe in byte, cosa che sarà utile per la compressione. Essa prende due argomenti, la stringa che desideri convertire e il formato, che per i nostri scopi è 'utf-8'.

Ci sono tre costanti contenenti i dati che devono essere compressi, denominate red_message, blue_message e green_message. Per iniziare, cammina fino al segno X dorato sul tappeto rosso, crea una variabile chiamata red_bytes. Prendi la costante red_message e converti il messaggio in byte affinché i dati possano essere compressi, utilizzando la funzione bytes() formattata a 'utf-8', in questo modo: red_bytes = bytes(red_message, 'utf-8').

Crea una variabile chiamata red_compression e memorizza in essa il valore di zlib.compress(). Usa red_bytes come argomento, che comprimerà i dati, in questo modo: red_compression = zlib.compress(red_bytes). Una volta che i dati sono stati compressi, utilizza la funzione predefinita display() nell'editor di codice e aggiungi le variabili red_message e red_compression come argomenti, in modo da leggere il messaggio e visualizzare i dati della compressione.

Cammina fino al segno X chiaro sul tappeto rosso e rivolgi lo sguardo alla scrivania, crea due variabili chiamate: message_length e compression_length. In queste variabili memorizzeremo la lunghezza in caratteri dei dati sia prima che dopo la compressione, utilizzando la funzione len(). Per esempio, per message_length prendi la lunghezza di red_message, in questo modo: message_length = len(red_message). Fai lo stesso per compression_length memorizzando la lunghezza (len()) di red_compression.

Una volta che entrambe le variabili sono state popolate, utilizza la funzione predefinita write() e inserisci message_length e compression_length come argomenti per verificare le dimensioni della compressione. Questo dimostra quanto il file venga compresso rispetto a quando è lasciato non compresso.

Cammina fino al segno X scuro sul tappeto blu e rivolgi lo sguardo al computer. Crea una variabile chiamata blue_bytes e converti blue_message in byte utilizzando la funzione bytes() nello stesso modo in cui hai fatto con red_message. Prendi la costante blue_message e comprimila memorizzando il valore di bz2.compress() e inserendo blue_bytes come argomento per comprimere i dati, in questo modo: blue_message = bz2.compress(blue_bytes).

Crea una variabile chiamata blue_decompress e memorizza in essa il valore di bz2.decompress(), aggiungendo blue_message come argomento per visualizzare i dati dopo la decompressione. Aggiungi le variabili blue_message e blue_decompress alla funzione predefinita display() in modo da visualizzare le varianti compresse e decompresse dei dati del messaggio.

Prosegui fino al segno X scuro sul tappeto verde e crea un oggetto chiamato compressor che lo popoli con lzma.LZMACompressor(), questo creerà un oggetto compressore che può essere utilizzato con le funzioni di lzma. Crea una variabile chiamata green_bytes e trasforma green_message in formato byte utilizzando la funzione bytes() nello stesso modo in cui hai fatto con red_message e blue_message.

Crea una variabile chiamata green_compression e memorizza in essa il valore di compressor.compress(), aggiungendo green_bytes come argomento. Questo ti permetterà di comprimere i dati del messaggio utilizzando l'oggetto compressore. Nella funzione predefinita display() aggiungi le variabili green_message e green_compression come argomenti per visualizzare il messaggio e i dati compressi.

Cammina fino al segno X chiaro sul tappeto verde e rivolgi lo sguardo alla scrivania, modifica le due variabili chiamate: message_length e compression_length. In queste variabili memorizzeremo la lunghezza in caratteri dei dati sia prima che dopo la compressione, utilizzando la funzione len(). Per message_length prendi la lunghezza di green_message con len(). Fai lo stesso per compression_length memorizzando la lunghezza (len()) di green_compression. Una volta che entrambe le variabili sono state popolate, utilizza la funzione predefinita write() e inserisci message_length e compression_length come argomenti per verificare le dimensioni della compressione e completare il livello.

Libro del Codice