Corso avanzato di sviluppo Python
Capitolo
>
Livello

Moduli di serializzazione
Moduli di Compressione

Obiettivo

Prendi messaggi e 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. Anche se è possibile inviarli manualmente uno per uno, un buon metodo consiste nel comprimere e decomprimere i file prima di archiviarli o inviarli. Per farlo, è possibile utilizzare moduli di compressione per diminuire le dimensioni dei file e rendere le informazioni più gestibili. A differenza di altri problemi che abbiamo risolto usando un unico modulo, ci sono diversi moduli di compressione che possiamo usare con una selezione ridotta di funzioni. Essi sono i seguenti:

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

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

  • bz2.compress(), usa un argomento, ossia le informazioni che desideri comprimere.
  • bz2.decompress(), usa un argomento, ossia le informazioni da decomprimere.

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

Per compressione elevata ma 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 consentono di attivare un compressore.
  • compress(): usa un argomento, ossia le informazioni che desideri comprimere. Deve essere fornito come byte anziché come stringa.

Oltre a questi moduli, useremo la funzione bytes(), che ti permette di convertire stringhe in byte, utile per la compressione. Richiede due argomenti: la stringa che vuoi convertire e il formato, che per i nostri scopi è 'utf-8'.

Ci sono tre costanti che contengono dati da comprimere, chiamate red_message, blue_message e green_message. Per iniziare, vai al segno X dorato sul tappeto rosso e crea una variabile chiamata red_bytes. Prendi la costante red_message e convertila in byte affinché i dati possano essere compressi, usando la funzione bytes() con formato 'utf-8', in questo modo: red_bytes = bytes(red_message, 'utf-8').

Crea una variabile chiamata red_compression e assegnale il valore di zlib.compress(). Usa red_bytes come argomento per comprimere i dati, in questo modo: red_compression = zlib.compress(red_bytes). Una volta che i dati sono stati compressi, usa la funzione pre-scritta display() nell'editor di codice e aggiungi le variabili red_message e red_compression come argomenti per leggere il messaggio e visualizzare i dati di compressione.

Vai al segno X chiaro sul tappeto rosso e posizionati di fronte 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, usando la funzione len(). Per esempio, per message_length ottieni la lunghezza di red_message, in questo modo: message_length = len(red_message). Fai lo stesso per compression_length memorizzando len(red_compression).

Una volta che entrambe le variabili sono state valorizzate, usa la funzione pre-scritta write() e inserisci message_length e compression_length come argomenti per verificare le dimensioni della compressione. Questo dimostra quanto il file sia compresso rispetto a quando non è compresso.

Vai al segno X scuro sul tappeto blu e posizionati davanti al computer. Crea una variabile chiamata blue_bytes e converti blue_message in byte usando 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 assegnale 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 pre-scritta display() per visualizzare le varianti compresse e decompresse dei dati del messaggio.

Dirigiti al segno X scuro sul tappeto verde e crea un oggetto chiamato compressor assegnandogli lzma.LZMACompressor(): in questo modo creerai 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 usando la funzione bytes() nello stesso modo in cui hai fatto con red_message e blue message.

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

Vai al segno X chiaro sul tappeto verde e posizionati di fronte 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 usando la funzione len(). Per message_length ottieni la lunghezza di green_message con len(). Fai lo stesso per compression_length memorizzando len(green_compression). Una volta che entrambe le variabili sono state valorizzate, usa la funzione pre-scritta write() e inserisci message_length e compression_length come argomenti per verificare le dimensioni della compressione e completare il livello.

Libro del Codice