gzip – Supporto per i file gzip¶
Il Novembre 24, 2021 da adminCodice sorgente: Lib/gzip.py
Questo modulo fornisce una semplice interfaccia per comprimere e decomprimere file proprio come farebbero i programmi GNU gzip e gunzip.
La compressione dei dati è fornita dal modulo zlib
.
Il modulo gzip
fornisce la classe GzipFile
, così come le funzioni di convenienzaopen()
, compress()
e decompress()
.La classe GzipFile
legge e scrive file in formato gzip, comprimendo o decomprimendo automaticamente i dati in modo che appaiano come un normale oggetto file.
Nota che altri formati di file che possono essere decompressi dai programmi gzip e gunzip, come quelli prodotti dacompress e pack, non sono supportati da questo modulo.
Il modulo definisce i seguenti elementi:
gzip.
open
(filename, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
Apre un file compresso con gzip in modalità binaria o testo, restituendo un fileobject.
L’argomento filename può essere un nome di file reale (un oggetto str
obytes
), o un oggetto file esistente da cui leggere o su cui scrivere.
L’argomento mode può essere uno qualsiasi tra 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
o 'xb'
per il modo binario, o 'rt'
,'at'
, 'wt'
, o 'xt'
per il modo testo. Il default è 'rb'
.
L’argomento compresslevel è un intero da 0 a 9, come per il costruttore GzipFile
.
Per il modo binario, questa funzione è equivalente al costruttore GzipFile
: GzipFile(filename, mode, compresslevel)
. In questo caso, gli argomenti codifica, errori e newline non devono essere forniti.
Per il modo testo, viene creato un oggetto GzipFile
, e avvolto in un’istanzaio.TextIOWrapper
con la codifica specificata, il comportamento di gestione degli errori, e le terminazioni di riga.
Cambiato nella versione 3.3: Aggiunto il supporto per il nome del file che è un oggetto file, il supporto per la modalità testo, e gli argomenti di codifica, errori e newline.
Cambiato nella versione 3.4: Aggiunto il supporto per le modalità 'x'
, 'xb'
e 'xt'
.
Cambiato nella versione 3.6: Accetta un oggetto simile a un percorso.
eccezionegzip.
BadGzipFile
¶
Un’eccezione sollevata per file gzip non validi. Eredita OSError
.EOFError
e zlib.error
possono anche essere sollevate per gzipfiles non validi.
Nuovo nella versione 3.8.
classegzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Costruttore della classe GzipFile
, che simula la maggior parte dei metodi di un oggetto file, ad eccezione del metodo truncate()
. Almeno uno tra fileobj e filename deve avere un valore non banale.
La nuova istanza della classe è basata su fileobj, che può essere un normale file, un oggettoio.BytesIO
o qualsiasi altro oggetto che simula un file. È predefinito a None
, nel qual caso filename viene aperto per fornire un oggetto file.
Quando fileobj non è None
, l’argomento filename è usato solo per essere incluso nell’intestazione del file gzip, che può includere il nome originale del file non compresso. È predefinito al nome del fileobj, se distinguibile; altrimenti, è predefinito alla stringa vuota, e in questo caso il nome originale del file non è incluso nell’intestazione.
L’argomento mode può essere uno qualsiasi tra 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
, o 'xb'
, a seconda che il file venga letto o scritto. Il default è il modo di fileobj se distinguibile; altrimenti, il default è 'rb'
. Nelle future versioni di Python la modalità di fileobj non sarà usata. È meglio specificare sempre la modalità di scrittura.
Nota che il file viene sempre aperto in modalità binaria. Per aprire un file compresso in modalità testo, usa open()
(o avvolgi il tuo GzipFile
con unio.TextIOWrapper
).
L’argomento compresslevel è un intero da 0
a 9
che controlla il livello di compressione; 1
è più veloce e produce la minore compressione, e 9
è più lento e produce la maggiore compressione. 0
è nessuna compressione. Il valore predefinito è 9
.
L’argomento mtime è un timestamp numerico opzionale da scrivere nel campo del tempo di ultima modifica nel flusso quando si comprime. Dovrebbe essere fornito solo in modalità di compressione. Se omesso o None
, viene usato il tempo corrente. Vedere l’attributo mtime
per maggiori dettagli.
Chiamando il metodo close()
di un oggetto GzipFile
non si chiude il fileobj, poiché si potrebbe voler aggiungere altro materiale dopo i dati compressi. Questo permette anche di passare un oggetto io.BytesIO
aperto per la scrittura come fileobj, e recuperare il buffer di memoria risultante usando il metodo getvalue()
dell’oggettoio.BytesIO
.
GzipFile
supporta l’interfaccia io.BufferedIOBase
, inclusa l’iterazione e la dichiarazione with
. Solo il metodotruncate()
non è implementato.
GzipFile
fornisce anche il seguente metodo e attributo:
peek
(n)¶
Leggi n byte non compressi senza avanzare la posizione del file.Al massimo viene fatta una singola lettura sul flusso compresso per soddisfare la chiamata. Il numero di byte restituito può essere maggiore o minore di quello richiesto.
Nota
Mentre la chiamata a peek()
non cambia la posizione del file di GzipFile
, può cambiare la posizione dell’oggettofile sottostante (ad esempio se il GzipFile
è stato costruito con il parametrofileobj).
Nuovo nella versione 3.2.
mtime
¶
Quando si decomprime, il valore del campo dell’ultimo tempo di modifica nell’intestazione più recente può essere letto da questo attributo, come un intero. Il valore iniziale prima di leggere qualsiasi intestazione è None
.
Tutti i flussi compressi gzip devono contenere questo campotimestamp. Alcuni programmi, come gunzip, fanno uso del timestamp. Il formato è lo stesso del valore di ritorno ditime.time()
e dell’attributo st_mtime
dell’oggetto restituito da os.stat()
.
Cambiato nella versione 3.1: è stato aggiunto il supporto per la dichiarazione with
, insieme all’argomento del costruttore mtime
.
Modificato nella versione 3.2: È stato aggiunto il supporto per i file non cercabili e con zero spazio.
Cambiato nella versione 3.3: Il metodo io.BufferedIOBase.read1()
è ora implementato.
Cambiato nella versione 3.4: Aggiunto il supporto per i modi 'x'
e 'xb'
.
Cambiato nella versione 3.5: Aggiunto il supporto per la scrittura di oggetti arbitrarybytes-like.Il metodo read()
ora accetta un argomento diNone
.
Cambiato nella versione 3.6: Accetta un oggetto simile a un percorso.
Deprecato dalla versione 3.9: Aprire GzipFile
per la scrittura senza specificare l’argomento mod è deprecato.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Comprime i dati, restituendo un oggetto bytes
contenente i dati compressi. compresslevel e mtime hanno lo stesso significato del costruttore GzipFile
sopra.
Nuovo nella versione 3.2.
Cambiato nella versione 3.8: Aggiunto il parametro mtime per un output riproducibile.
gzip.
decompress
(data)¶
Decomprime i dati, restituendo un oggetto bytes
contenente i dati non compressi.
Nuovo nella versione 3.2.
Esempi di utilizzo¶
Esempio di come leggere un file compresso:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Esempio di come creare un file GZIP compresso:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Esempio di come comprimere GZIP un file esistente:
import gzipimport shutilwith open('/home/joe/file.txt', 'rb') as f_in: with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)
Esempio di come comprimere GZIP una stringa binaria:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Vedi anche
Modulo zlib
Il modulo base di compressione dati necessario per supportare il formato file gzip.
Interfaccia a riga di comando¶
Il modulo gzip
fornisce una semplice interfaccia a riga di comando per comprimere file ordecompressi.
Una volta eseguito il modulo gzip
mantiene il/i file di input.
Cambiato nella versione 3.8: Aggiungere una nuova interfaccia della linea di comando con un utilizzo.Per default, quando si esegue la CLI, il livello di compressione predefinito è 6.
Opzioni della linea di comando¶
file
¶
Se il file non è specificato, letto da sys.stdin
.
--fast
¶
Indica il metodo di compressione più veloce (meno compressione).
--best
¶
Indica il metodo di compressione più lento (migliore compressione).
-d
,
--decompress
¶
Decomprime il file dato.
-h
,
--help
¶
Mostra il messaggio di aiuto.
Lascia un commento