Zlib Python

Zlib Python

La libreria Python Zlib offre un'interfaccia Python per la libreria Zlib-scritta C, una generalizzazione di livello superiore per metodi di compressione senza perdita di perdita. È possibile utilizzare la funzione di compressione Zlib nei prodotti commerciali perché è gratuito e non brevettato. È portatile su più piattaforme perché utilizza una compressione senza perdita, il che impedisce la perdita di dati durante la compressione e la decompressione. Un altro vantaggio significativo è che questo metodo di compressione non ingrandisce i dati. I metodi Zlib per comprimere e decomprimere i dati, DataStream e file saranno trattati in questo tutorial.

Perché usare Zlib in Python?

In termini di sicurezza, questa biblioteca/modulo svolge un ruolo significativo. Numerose applicazioni richiedono la capacità di comprimere e decomprimere i dati arbitrari, inclusi stringhe, file e contenuto strutturato in memoria. Una delle migliori caratteristiche del modulo Zlib è la sua compatibilità con il formato Strumento/file GZIP, che è un'applicazione di compressione ampiamente utilizzata e popolare su UNIX.

Come utilizziamo le funzioni di compressione e decompressione di Zlib in Python?

Compressione e decompressione sono le due funzioni più significative offerte dalla libreria Zlib. Sia le operazioni di compressione che decompressione possono essere eseguite come operazioni una tantum o rompendo i dati in blocchi, come vedresti da un flusso di dati. La sezione seguente spiegherà entrambe le modalità di funzionamento.

Compressione in Python Zlib

Ora vedremo come comprimere una stringa di dati, stringhe di dati e file utilizzando la libreria Zlib.

Stringhe di dati di compressione

Comprendere una stringa è possibile con l'aiuto della funzione Compress () della libreria Zlib. La sintassi di questa funzione è abbastanza semplice e richiede solo due argomenti.

Sintassi:

Compress (data_string, livello)

Qui, data_string è la stringa di dati da comprendere e l'argomento di livello può essere specificato da un valore intero che potrebbe variare da -1 a 9. Questo parametro di livello determina il livello di compressione. Se il livello è specificato come 1, il livello di compressione sarà il più basso/minimo. Tuttavia sarà il più veloce. Il livello più lento di compressione, io.e., 9, produce il livello più alto/massimo di compressione. L'impostazione predefinita, livello 6, è rappresentato dal valore -1. La velocità e la compressione sono bilanciate al valore predefinito. Non c'è compressione al livello 0.

Di seguito viene fornito un esempio di come utilizzare il metodo Cimpress per una stringa:

Se specifichiamo il parametro di livello come 0, non ci sarà alcuna compressione:

Quando si confronta i risultati, il livello di compressione è impostato su 0 e 2. Potresti vedere una piccola differenza. In formato esadecimale, a livello = 2, la funzione ha restituito una stringa di lunghezza 62, mentre, a livello 0, viene restituita una stringa di lunghezza 68. Questa differenza di lunghezza arriva perché non si verifica alcuna compressione al livello 0.

Flussi di dati di compressione

Il metodo COMPRESSOBJ () può gestire flussi di dati di grandi dimensioni. Un oggetto di compressione viene restituito dalla funzione COMPRESSOBJ ().

Sintassi:

Compredebj (Livello, Metodo, WBIT, MemLevel, Strategia)

A parte il parametro dei dati della stringa, l'unica distinzione tra i parametri di questo metodo e quelli di Compress () è il parametro WBITS, che regola la dimensione della finestra e determina se includere o meno l'intestazione e il rimorchio nell'output. I seguenti sono possibili valori WBITS:

Intervallo di valori Logaritmo delle dimensioni della finestra Produzione
+9 a +15 Base 2 Le intestazioni del trailer e Zlib sono incluse.
+Da 9 a -15 Rappresentare il valore assoluto del WBIT. L'intestazione e il rimorchio sono esclusi.
+25 a +31 I quattro bit più bassi del valore. Il checksum di intestazione e trailing è incluso.

L'argomento del metodo specificherà l'algoritmo di compressione. L'algoritmo predefinito, o algoritmo attualmente disponibile, è sgonfiato. L'argomento strategico definisce la messa a punto della compressione.

Il seguente codice mostra come utilizzare la funzione COMPRESSOBJ ():

Abbiamo utilizzato semplici dati di stringa che non sono un flusso di dati di grandi dimensioni per dimostrare come funziona la funzione comprwebj (). La stringa "Adoro scrivere i codici Python" è stata compressa. Questo metodo viene in genere impiegato quando i flussi sono troppo grandi o difficili da archiviare in memoria. Questa tecnica è cruciale in applicazioni più grandi perché possiamo personalizzare la compressione e utilizzarla per comprimere i dati in blocchi/serie.

Comprimere un file

Il file verrà compresso utilizzando la funzione Compression (). IL .Il file DOCX verrà compresso nell'esempio seguente.

Il miglior livello di compressione offerto da questo algoritmo, Z migliore compressione, viene utilizzato nella funzione COMPRESS. Il rapporto tra la lunghezza dei dati compressi e la lunghezza dei dati originali viene utilizzato per calcolare il livello di compressione dei dati. Il file è compresso al 6%, come mostrato nell'output.

Decompressione in Python Zlib

Ora vedremo come decomprimere una stringa di dati, stringhe di dati e file utilizzando la libreria Zlib.

Decompressione delle stringhe di dati

La funzione decompress () rende semplice decomprimere una stringa di dati compressi.

Sintassi:

decompress (data_string, wbit, bufsize)

Questa funzione decomprime i byte di dati stringa. La dimensione del buffer di cronologia può essere impostata utilizzando il parametro WBITS. La dimensione della finestra più grande viene utilizzata come impostazione predefinita. Anche l'intestazione e il rimorchio del file compresso. I valori possibili sono:

Intervallo di valori Dimensione della finestra Ingresso
+8 a +15 Base 2 Le intestazioni del trailer e Zlib sono incluse.
-8 a -15 Il valore assoluto del WBIT. Stream, intestazione e trailer grezzi sono esclusi.
+24 a +31 = 16 + (da 8 a 15) I quattro bit più bassi del valore. Le intestazioni del trailer e Zlib sono incluse.
+40 a +47 = 32 + (da 8 a 15) I quattro bit più bassi del valore. formato gzip o zlib

L'argomento bufsize specifica il valore iniziale della dimensione del buffer. Tuttavia, la caratteristica chiave di questo argomento è che se il specificato non è esatto, verrà automaticamente regolato se è necessaria una maggiore dimensione del buffer. La stringa di dati compressa può essere decompressa usando il seguente esempio:

Decomprimendo i flussi di dati

A seconda dell'origine e delle dimensioni dei dati, la decompressione dei flussi di dati di grandi dimensioni potrebbe richiedere la gestione della memoria. Il metodo decompressObj () consente di dividere un flusso di dati in più blocchi che possiamo decomprimere separatamente se non è possibile utilizzare tutte le risorse o non hai abbastanza memoria.

Sintassi:

decompressebj (wbits [, zdict])

Per decomprimere i dati particolari, useremo l'oggetto di decompressione che la funzione decompressobj () restituisce. Il parametro WBITS ha le stesse caratteristiche di quelle descritte in precedenza per la funzione decompress ().

Il flusso compresso di lunghezza è 34. Dopo la decompressione, viene restituita la lunghezza del flusso di 26, che era la dimensione effettiva del nostro flusso di dati.

Decomprimendo un file

I dati nel file possono essere facilmente decompressi, come abbiamo visto negli esempi precedenti. L'unica differenza tra questo esempio e quello precedente è che la funzione decompress () verrà utilizzata dopo aver ottenuto i dati compressi dal file. Questo metodo è utile quando i dati sono abbastanza compatti da adattarsi comodamente in memoria.

Il campione.Il file txt contenente la stringa "Hello World I Love Python" è stato letto. Abbiamo scelto di usare decompress () piuttosto che decompressObj () perché il file contiene una piccola stringa.

Conclusione

Abbiamo discusso che quando un'applicazione richiede una compressione sicura, il modulo Python Zlib è utile. Sebbene la libreria Zlib abbia molte funzioni, abbiamo coperto alcune delle più comuni. Le funzioni Compress () e Decompress () sono utilizzate per piccoli dati, mentre le funzioni COMPRESEBJ () e decompressebj () forniscono la compressione e la decompressione di flussi di dati di grandi dimensioni e quindi offrono una maggiore flessibilità.