gzip – Ondersteuning voor gzip-bestanden¶
On november 24, 2021 by adminBroncode: Lib/gzip.py
Deze module biedt een eenvoudige interface om bestanden te comprimeren en decomprimeren, net zoals de GNU programma’s gzip en gunzip dat zouden doen.
De datacompressie wordt verzorgd door de zlib
module.
De gzip
module levert de GzipFile
klasse, evenals deopen()
, compress()
en decompress()
gemaksfuncties.De GzipFile
klasse leest en schrijft gzip-formaat bestanden, automatisch comprimeren of decomprimeren van de gegevens, zodat het lijkt op een gewone file object.
Merk op dat extra bestandsformaten die kunnen worden gedecomprimeerd door de gzip en gunzip programma’s, zoals die geproduceerd doorcompress en pack, niet worden ondersteund door deze module.
De module definieert de volgende items:
gzip.
open
(bestandsnaam, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
Open een gzip-gecomprimeerd bestand in binaire of tekstmodus, waarbij een bestandsobject wordt teruggezonden.
Het bestandsnaam-argument kan een echte bestandsnaam zijn (een str
ofbytes
object), of een bestaand bestandsobject om van te lezen of naar te schrijven.
Het argument mode kan 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
of 'xb'
zijn voor binaire mode, of 'rt'
,'at'
, 'wt'
, of 'xt'
voor tekst mode. De standaardwaarde is 'rb'
.
Het compresslevel-argument is een geheel getal van 0 tot 9, zoals voor deGzipFile
-constructor.
Voor binaire modus is deze functie equivalent aan de GzipFile
-constructor: GzipFile(filename, mode, compresslevel)
. In dit geval moeten de argumenten voor codering, fouten en newline niet worden opgegeven.
Voor tekstmodus wordt een GzipFile
-object gemaakt, dat wordt ingepakt in eenio.TextIOWrapper
-instantie met de opgegeven codering, het gedrag bij de foutenbehandeling, en regeleinden.
Wijzigingen in versie 3.3: ondersteuning toegevoegd voor bestandsnaam als bestandsobject, ondersteuning voor tekstmodus, en de argumenten voor codering, fouten en newline.
Wijzigingen in versie 3.4: Ondersteuning toegevoegd voor de modi 'x'
, 'xb'
en 'xt'
.
Veranderd in versie 3.6: Accepteert een pad-achtig object.
-exceptiongzip.
BadGzipFile
¶
Een uitzondering die wordt opgeworpen voor ongeldige gzip-bestanden. Deze erft OSError
.EOFError
en zlib.error
kunnen ook worden opgeworpen voor ongeldige gzipfiles.
Nieuw in versie 3.8.
klassegzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Constructor voor de klasse GzipFile
, die de meeste van de methoden van een bestandsobject simuleert, met uitzondering van de truncate()
-methode. Ten minste een van fileobj en filename moet een niet-triviale waarde krijgen.
De nieuwe klasse-instantie is gebaseerd op fileobj, dat een gewoon bestand kan zijn, eenio.BytesIO
-object, of een ander object dat een bestand simuleert. De standaardinstelling is None
, in welk geval bestandsnaam wordt geopend om een bestandsobject te leveren.
Wanneer fileobj niet None
is, wordt het argument bestandsnaam alleen gebruikt om te worden opgenomen in de gzip-bestandsheader, die de oorspronkelijke bestandsnaam van het ongecomprimeerde bestand kan bevatten. De standaardinstelling is de bestandsnaam van fileobj, indien deze kan worden onderscheiden; anders is de standaardinstelling de lege tekenreeks, en in dit geval wordt de oorspronkelijke bestandsnaam niet opgenomen in de header.
Het argument mode kan een van de volgende zijn: 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
, 'wb'
, 'x'
, of 'xb'
, afhankelijk van of het bestand zal worden gelezen of geschreven. De standaardwaarde is de modus van de bestandsobj als die kan worden onderscheiden; anders is de standaardwaarde 'rb'
. In toekomstige versies van Python zal de modus van fileobj niet meer worden gebruikt. Het is beter om altijd de modus voor het schrijven op te geven.
Merk op dat het bestand altijd in binaire modus wordt geopend. Om een gecomprimeerd bestand in tekstmodus te openen, gebruikt u open()
(of omwikkel uw GzipFile
met eenio.TextIOWrapper
).
Het argument compresslevel is een geheel getal van 0
tot 9
dat de mate van compressie bepaalt; 1
is het snelst en geeft de minste compressie, en 9
is het langzaamst en geeft de meeste compressie. 0
is geen compressie. De standaardwaarde is 9
.
Het mtime argument is een optionele numerieke tijdstempel die bij het comprimeren wordt weggeschreven naar het veld voor de laatste wijzigingstijd in de stroom. Dit argument dient alleen in compressie-modus te worden gebruikt. Indien weggelaten of None
, wordt de huidige tijd gebruikt. Zie het mtime
attribuut voor meer details.
Het aanroepen van de close()
methode van een GzipFile
object sluit de fileobj niet af, omdat u misschien meer materiaal wilt toevoegen na de gecomprimeerde gegevens. Hierdoor kunt u ook een io.BytesIO
-object, geopend voor schrijven, doorgeven als fileobj, en de resulterende geheugenbuffer ophalen met de getvalue()
-methode van hetio.BytesIO
-object.
GzipFile
ondersteunt de io.BufferedIOBase
-interface, inclusief iteratie en het with
statement. Alleen de methodetruncate()
is niet geïmplementeerd.
GzipFile
verschaft ook de volgende methode en het volgende attribuut:
peek
(n)¶
Leest n niet-gecomprimeerde bytes zonder de bestandspositie te verplaatsen.Er wordt hooguit één keer gelezen op de gecomprimeerde stroom om aan de oproep te voldoen. Het aantal geretourneerde bytes kan meer of minder zijn dan gevraagd.
Note
Hoewel het aanroepen van peek()
de bestandspositie van de GzipFile
niet verandert, kan het de positie van het onderliggende bestandsobject veranderen (bijv.
Nieuw in versie 3.2.
mtime
¶
Bij het decomprimeren kan de waarde van het veld voor de laatste wijziging in de laatstgelezen header uit dit attribuut worden gelezen, als een geheel getal. De beginwaarde voor het lezen van de headers is None
.
Alle gzip gecomprimeerde streams moeten het veld “timestamp” bevatten. Sommige programma’s, zoals gunzip, maken gebruik van de timestamp. Het formaat is hetzelfde als de retourwaarde van time.time()
en het st_mtime
-attribuut van het object dat door os.stat()
wordt geretourneerd.
Veranderd in versie 3.1: ondersteuning voor het with
-instructie is toegevoegd, samen met het tijd-constructorargument en het mtime
-attribuut.
Wijzigingen in versie 3.2: Ondersteuning voor “zero-padded” en “unseekable” bestanden werd toegevoegd.
Wijzigingen in versie 3.3: De methode io.BufferedIOBase.read1()
is nu geïmplementeerd.
Wijzigingen in versie 3.4: Ondersteuning toegevoegd voor de modi 'x'
en 'xb'
.
Veranderd in versie 3.5: Ondersteuning toegevoegd voor het schrijven van arbitrarybytes-achtige objecten.De methode read()
accepteert nu een argument vanNone
.
Veranderd in versie 3.6: Accepteert een pad-achtig object.
Gewist sinds versie 3.9: Het openen van GzipFile
voor schrijven zonder het modeargument te specificeren, is achterhaald.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Compresseer de gegevens en retourneer een bytes
-object dat de gecomprimeerde gegevens bevat. compresslevel en mtime hebben dezelfde betekenis als in de GzipFile
constructor hierboven.
Nieuw in versie 3.2.
Gewijzigd in versie 3.8: De parameter mtime toegevoegd voor reproduceerbare uitvoer.
gzip.
decompress
(data)¶
Decomprimeer de gegevens, waarbij een bytes
object wordt teruggegeven dat de ongecomprimeerde gegevens bevat.
Nieuw in versie 3.2.
Gebruiksvoorbeelden¶
Voorbeeld van hoe een gecomprimeerd bestand kan worden gelezen:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Voorbeeld van hoe een gecomprimeerd GZIP-bestand kan worden gemaakt:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Voorbeeld van hoe een bestaand bestand kan worden GZIP-gecomprimeerd:
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)
Exemplaar van hoe een binaire string met GZIP kan worden gecomprimeerd:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Zie ook
Module zlib
De basisgegevenscompressiemodule die nodig is om het bestandsformaat gzip te ondersteunen.
Command Line Interface¶
De gzip
module biedt een eenvoudige command line interface om bestanden te comprimeren.
Eenmaal uitgevoerd behoudt de gzip
module de input file(s).
Veranderd in versie 3.8: Een nieuwe opdrachtregelinterface toegevoegd met een gebruik.Standaard, wanneer u de CLI uitvoert, is het standaard compressieniveau 6.
Commando regelopties¶
file
¶
Als bestand niet is opgegeven, wordt gelezen uit sys.stdin
.
--fast
¶
Geeft de snelste compressiemethode aan (minder compressie).
--best
¶
Geeft de langzaamste compressiemethode aan (beste compressie).
-d
,
--decompress
¶
Decomprimeer het opgegeven bestand.
-h
,
--help
¶
Toon het helpbericht.
Geef een antwoord