gzip – Unterstützung für gzip-Dateien¶
On November 24, 2021 by adminQuellcode: Lib/gzip.py
Dieses Modul bietet eine einfache Schnittstelle zum Komprimieren und Dekomprimieren von Dateien, so wie es die GNU-Programme gzip und gunzip tun würden.
Die Datenkompression wird vom Modul zlib
bereitgestellt.
Das Modul gzip
stellt die Klasse GzipFile
sowie die Komfortfunktionen open()
, compress()
und decompress()
bereit.Die Klasse GzipFile
liest und schreibt Dateien im gzip-Format, wobei die Daten automatisch komprimiert oder dekomprimiert werden, so dass sie wie ein gewöhnliches Dateiobjekt aussehen.
Bitte beachten Sie, dass zusätzliche Dateiformate, die von den Programmen gzip und gunzip dekomprimiert werden können, wie z.B. die von compress und pack erzeugten, von diesem Modul nicht unterstützt werden.
Das Modul definiert die folgenden Elemente:
gzip.
open
(filename, mode=’rb‘, compresslevel=9, encoding=None, errors=None, newline=None)¶
Öffnet eine gzip-komprimierte Datei im Binär- oder Textmodus und gibt ein Datei-Objekt zurück.
Das Argument filename kann ein tatsächlicher Dateiname sein (ein str
oderbytes
Objekt), oder ein bestehendes Dateiobjekt, aus dem gelesen oder in das geschrieben werden soll.
Das Argument mode kann einer der Werte 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
oder 'xb'
für den Binärmodus oder 'rt'
,'at'
, 'wt'
oder 'xt'
für den Textmodus sein. Die Voreinstellung ist 'rb'
.
Das Argument compresslevel ist eine ganze Zahl von 0 bis 9, wie beim KonstruktorGzipFile
.
Für den Binärmodus entspricht diese Funktion dem Konstruktor GzipFile
: GzipFile(filename, mode, compresslevel)
. In diesem Fall müssen die Argumente encoding, errors und newline nicht angegeben werden.
Für den Textmodus wird ein GzipFile
-Objekt erzeugt und in eineio.TextIOWrapper
-Instanz mit dem angegebenen encoding, Fehlerbehandlung und Zeilenende(n) verpackt.
Geändert in Version 3.3: Unterstützung für filename als Dateiobjekt, Unterstützung für den Textmodus und die Argumente Kodierung, Fehler und Zeilenumbruch hinzugefügt.
Geändert in Version 3.4: Unterstützung für die Modi 'x'
, 'xb'
und 'xt'
hinzugefügt.
Geändert in Version 3.6: Akzeptiert ein pfadähnliches Objekt.
exceptiongzip.
BadGzipFile
¶
Eine Ausnahme, die bei ungültigen gzip-Dateien ausgelöst wird. Sie erbt OSError
.EOFError
und zlib.error
können auch für ungültige gzip-Dateien ausgelöst werden.
Neu in Version 3.8.
classgzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)
Konstruktor für die Klasse GzipFile
, die die meisten Methoden eines File-Objekts simuliert, mit Ausnahme der truncate()
Methode. Mindestens eines von fileobj und filename muss einen nicht-trivialen Wert haben.
Die neue Klasseninstanz basiert auf fileobj, das eine reguläre Datei, einio.BytesIO
Objekt oder ein beliebiges anderes Objekt sein kann, das eine Datei simuliert. Der Standardwert ist None
, in diesem Fall wird filename geöffnet, um ein Dateiobjekt bereitzustellen.
Wenn fileobj nicht None
ist, wird das Argument filename nur verwendet, um in den Header der gzip-Datei aufgenommen zu werden, der den Originaldateinamen der unkomprimierten Datei enthalten kann. Der Standardwert ist der Dateiname von fileobj, wenn dieser erkennbar ist; andernfalls ist es die leere Zeichenkette, und in diesem Fall wird der ursprüngliche Dateiname nicht in den Header aufgenommen.
Das Argument mode kann einer der Werte 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
oder 'xb'
sein, je nachdem, ob die Datei gelesen oder geschrieben wird. Die Vorgabe ist der Modus von fileobj, wenn dieser erkennbar ist; andernfalls ist die Vorgabe 'rb'
. In zukünftigen Python-Versionen wird der Modus von fileobj nicht mehr verwendet werden. Es ist besser, immer den Modus zum Schreiben anzugeben.
Beachten Sie, dass die Datei immer im Binärmodus geöffnet wird. Um eine komprimierte Datei im Textmodus zu öffnen, verwenden Sie open()
(oder umschließen Sie Ihr GzipFile
mit einemio.TextIOWrapper
).
Das Argument compresslevel ist eine ganze Zahl von 0
bis 9
, die den Grad der Komprimierung steuert; 1
ist am schnellsten und erzeugt die geringste Komprimierung, und 9
ist am langsamsten und erzeugt die stärkste Komprimierung. 0
ist keine Komprimierung. Die Vorgabe ist 9
.
Das Argument mtime ist ein optionaler numerischer Zeitstempel, der bei der Komprimierung in das Feld für die letzte Änderungszeit im Stream geschrieben wird. Es sollte nur im Komprimierungsmodus angegeben werden. Wenn es weggelassen wird oder None
, wird die aktuelle Zeit verwendet. Siehe das mtime
-Attribut für weitere Details.
Durch den Aufruf der close()
-Methode eines GzipFile
-Objekts wird fileobj nicht geschlossen, da Sie möglicherweise weiteres Material nach den komprimierten Daten anhängen möchten. So kann man auch ein zum Schreiben geöffnetes io.BytesIO
-Objekt als fileobj übergeben und den resultierenden Speicherpuffer mit der getvalue()
-Methode des io.BytesIO
-Objekts abrufen.
GzipFile
unterstützt die io.BufferedIOBase
-Schnittstelle, einschließlich Iteration und der with
-Anweisung. Nur die Methode truncate()
ist nicht implementiert.
GzipFile
bietet außerdem die folgende Methode und das folgende Attribut:
peek
(n)¶
Lesen von n unkomprimierten Bytes, ohne die Dateiposition voranzutreiben.Es wird höchstens ein einziges Lesen des komprimierten Streams durchgeführt, um den Aufruf zu erfüllen. Die Anzahl der zurückgegebenen Bytes kann mehr oder weniger sein als angefordert.
Hinweis
Während der Aufruf von peek()
die Dateiposition der GzipFile
nicht ändert, kann er die Position des zugrundeliegenden Dateiobjekts ändern (z.B. wenn das GzipFile
mit dem Parameterfileobj konstruiert wurde).
Neu in Version 3.2.
mtime
¶
Beim Dekomprimieren kann der Wert des Feldes für die letzte Änderungszeit im zuletzt gelesenen Header als Ganzzahl aus diesem Attribut gelesen werden. Der Anfangswert vor dem Lesen von Headern ist None
.
Alle gzip-komprimierten Datenströme müssen das Zeitstempelfeld enthalten. Einige Programme, wie gunzip, verwenden den Zeitstempel. Das Format ist dasselbe wie der Rückgabewert von time.time()
und das st_mtime
-Attribut des von os.stat()
zurückgegebenen Objekts.
Geändert in Version 3.1: Unterstützung für die with
-Anweisung wurde hinzugefügt, zusammen mit dem Konstruktorargument time und dem Attribut mtime
.
Änderung in Version 3.2: Unterstützung für nullgefüllte und nicht auffindbare Dateien wurde hinzugefügt.
Änderung in Version 3.3: Die Methode io.BufferedIOBase.read1()
ist jetzt implementiert.
Änderung in Version 3.4: Unterstützung für die Modi 'x'
und 'xb'
wurde hinzugefügt.
Änderung in Version 3.5: Unterstützung für das Schreiben beliebiger Bytes-ähnlicher Objekte wurde hinzugefügt.
Änderung in Version 3.6: Die Methode read()
akzeptiert jetzt ein Argument vonNone
.
: Akzeptiert ein pfadartiges Objekt.
Veraltet seit Version 3.9: Das Öffnen von GzipFile
zum Schreiben ohne Angabe des Modearguments ist veraltet.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Komprimiert die Daten und gibt ein bytes
Objekt mit den komprimierten Daten zurück. compresslevel und mtime haben die gleiche Bedeutung wie im obigen GzipFile
Konstruktor.
Neu in Version 3.2.
Geändert in Version 3.8: Hinzufügen des Parameters mtime für eine reproduzierbare Ausgabe.
gzip.
decompress
(Daten)
Dekomprimieren Sie die Daten und geben Sie ein bytes
Objekt zurück, das die nicht komprimierten Daten enthält.
Neu in Version 3.2.
Verwendungsbeispiele¶
Beispiel für das Lesen einer komprimierten Datei:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Beispiel für das Erstellen einer komprimierten GZIP-Datei:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Beispiel für die GZIP-Komprimierung einer vorhandenen Datei:
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)
Beispiel für die GZIP-Komprimierung eines binären Strings:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Siehe auch
Modul zlib
Das grundlegende Datenkompressionsmodul, das zur Unterstützung des gzip-Dateiformats benötigt wird.
Befehlszeilenschnittstelle¶
Das gzip
Modul bietet eine einfache Befehlszeilenschnittstelle zum Komprimieren oder Dekomprimieren von Dateien.
Nach der Ausführung behält das gzip
Modul die Eingabedatei(en) bei.
Geändert in Version 3.8: Hinzufügen einer neuen Befehlszeilenschnittstelle mit einer Verwendung.
Befehlszeilenoptionen¶
file
¶
Wenn keine Datei angegeben wird, wird aus sys.stdin
gelesen.
--fast
¶
Gibt die schnellste Komprimierungsmethode an (weniger Komprimierung).
--best
¶
Indiziert die langsamste Komprimierungsmethode (beste Komprimierung).
-d
,
--decompress
¶
Dekomprimiere die angegebene Datei.
-h
,
--help
¶
Zeige die Hilfemeldung.
Schreibe einen Kommentar