7.15 zlib -- Compressione compatibile con gzip

Per le applicazioni che richiedono la compressione dei dati, le funzioni in questo modulo permettono la compressione e la decompressione, usando la libreria zlib. La libreria zlib ha la sua pagina web pressohttp://www.gzip.org/zlib/. La versione 1.1.3 è la versione più recente nel settembre 2000; usare una versione successiva se disponibile. Esistono incompatibilità note fra i moduli Python e le versioni datate della libreria zlib.

L'eccezione e le funzioni disponibili in questo modulo sono:

exception error
Eccezione sollevata in caso di errori di compressione e decompressione.

adler32( string[, value])
Computa un checksum Adler-32 di string. (Un checksum Adler-32 è affidabile quasi quanto un CRC32 ma può essere computato più rapidamente.) Se value è presente, verrà utilizzato come valore iniziale del checksum; altrimenti, verrà usato un valore predefinito fissato. Questo permette di computare un checksum funzionante sulla concatenazione di alcune stringhe di input. L'algoritmo non è crittograficamente forte, e non dovrebbe essere usato per firme digitali o di autenticazione. Visto che l'algoritmo è stato disegnato come algoritmo di checksum, non è adattabile come algoritmo generale di hash.

compress( string[, level])
Comprime i dati in string, restituendo una stringa contenente i dati compressi. level è un intero da 1 a 9 che esprime il livello di compressione; 1 è il più veloce e produce la compressione minore, 9 è il più lento e produce la massima compressione. Il valore predefinito è 6. In caso di errore viene sollevata l'eccezione error.

compressobj( [level])
Restituisce un oggetto di compressione, in modo da essere usato per comprimere flussi di dati che non devono essere memorizzati in una sola volta. level è un intero da 1 a 9 che esprime il livello di compressione; 1 è il più veloce e produce la compressione minore, 9 è il più lento e produce la massima compressione. Il valore predefinito è 6.

crc32( string[, value])
Computa un checksum CRC (Controllo Ciclico di Ridondanza) di string. Se value è presente, verrà utilizzato come valore iniziale del checksum; altrimenti, verrà usato un valore predefinito fissato. Questo permette di computare un checksum funzionante sulla concatenazione di alcune stringhe di input. L'algoritmo non è crittograficamente forte, e non dovrebbe essere usato per firme digitali o di autenticazione. Visto che l'algoritmo è stato disegnato come algoritmo di checksum, non è adattabile come algoritmo generale di hash.

decompress( string[, wbits[, bufsize]])
Decomprime in dati in string, restituendo una stringa contenente i dati decompressi. Il parametro wbits controlla la dimensione del window buffer. Se è stato passato bufsize, questi sarà usato come dimensione iniziale per il buffer di output. Solleva l'eccezione error in caso di errore.

Il valore assoluto di wbits è il logaritmo in base due della dimensione dell'history buffer (il ``window size'') usato durante la compressione dei dati. Il suo valore assoluto dovrebbe trovarsi fra 8 e 15 per le versioni più recenti della libreria zlib, valori più grandi provocano una migliore compressione al costo di un maggiore utilizzo della memoria. Il valore predefinito è 15. Quando wbits è negativo, l'header standard di gzip viene soppresso; questa è una caratteristica non documentata della libreria zlib, usata per compatibilità con il formato di compressione dei file unzip.

bufsize è la dimensione iniziale del buffer usato per contenere i dati decompressi. Se viene richiesto più spazio, il buffer verrà incrementato di conseguenza, perciò non c'è bisogno di impostare esattamente questo valore; la sua immissione farà solo risparmiare qualche chiamata a malloc(). La dimensione predefinita è 16384.

decompressobj( [wbits])
Restituisce un oggetto di decompressione, da essere usato per decomprimere flussi di dati che non starebbero tutti insieme in memoria. Il parametro wbits controlla la dimensione del window buffer.

Gli oggetti di compressione supportano i seguenti metodi:

compress( string)
Comprime string, restituendo una stringa contenente dati compressi per almeno parte dei dati in string. Questi dati dovrebbero essere concatenati all'output prodotto da ogni precedente chiamata al metodo compress(). Alcuni input possono essere tenuti in buffer interni per un utilizzo successivo.

flush( [mode])
Tutti gli input in attesa vengono elaborati, e viene restituita una stringa contenente l'output compresso rimanente. mode può essere scelto fra le costanti Z_SYNC_FLUSH, Z_FULL_FLUSH o Z_FINISH, predefinito è Z_FINISH. Z_SYNC_FLUSH e Z_FULL_FLUSH permettono un'ulteriore compressione di stringhe di dati e vengono usate per permettere un parziale recupero degli errori durante la decompressione, mentre Z_FINISH finisce i flussi compressi e previene la compressione di altri dati. Dopo aver chiamato flush() con mode impostato a Z_FINISH, il metodo compress() non può essere chiamato di nuovo; l'unica azione sensata è cancellare l'oggetto.

Gli oggetti di decompressione supportano i seguenti metodi, e due attributi.

unused_data
Una stringa che contiene ogni byte successivo alla fine dei dati compressi. In sostanza, rimane vuota "" fino a che l'ultimo byte contenente dati compressi è disponibile. Se l'intera stringa è formata da dati compressi, questa è "", ovvero una stringa vuota.

Attualmente, l'unico modo per determinare dove una stringa di dati compressi termina è decomprimerla. Questo significa che, quando i dati compressi sono una parte contenuta in un file più grande, si può trovare la fine di questa stringa leggendo i dati, ed inserendoli insieme a qualche stringa non vuota in un metodo di decompressione di oggetti decompress, finché l'attributo unused_data non risulta più una stringa vuota.

unconsumed_tail
Una stringa che contiene tutti i dati che non sono stati consumati dall'ultima chiamata a decompress, a causa del superamento del limite per il buffer dei dati non compressi. Questi dati non sono ancora stati mandati in lavorazione da parte della zlib, per cui dovete alimentarli (possibilmente con ulteriori concatenazioni) con una successiva chiamata al metodo decompress, in modo da ottenere l'output corretto.

decompress( string)
[max_length] Decomprime string, restituendo una stringa contenente i dati non compressi corrispondenti ad almeno parte dei dati in string. Questi dati dovrebbero essere concatenati all'ouput prodotto da ogni precedente chiamata al metodo decompress(). Alcuni dei dati in input possono essere preservati in buffer interni per una elaborazione successiva.

Se viene fornito il parametro facoltativo max_length, il valore restituito non sarà superiore di max_length. Questo può significare che non tutto l'input compresso può essere elaborato; ed i dati non consumati verranno messi nell'attributo unconsumed_tail. La stringa deve essere passata anche ad una successiva chiamata a decompress() se la decompressione deve continuare. Se max_length non viene fornita sarà decompresso l'intero input, e unconsumed_tail sarà una stringa vuota.

flush( )
Tutti gli input in attesa vengono elaborati, e viene restituita una stringa contenente l'output decompresso rimanente. Dopo aver chiamato flush(), il metodo decompress() non può più essere nuovamente chiamato; l'unica azione sensata è cancellare l'oggetto.

Vedete anche:

Modulo gzip:
Leggere e scrivere file in formato gzip gzip.
http://www.gzip.org/zlib/
La pagina web di zlib.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.