gzip – Understøttelse af gzip-filer¶
On november 24, 2021 by adminKildekode: Lib/gzip.py
Dette modul giver en simpel grænseflade til at komprimere og dekomprimere filer ligesom GNU-programmerne gzip og gunzip ville gøre det.
Datakomprimeringen leveres af modulet zlib
.
Modulet gzip
giver GzipFile
-klassen, samt bekvemmelighedsfunktionerne open()
, compress()
og decompress()
.GzipFile
-klassen læser og skriver filer i gzip-format og komprimerer eller dekomprimerer automatisk dataene, så de ligner et almindeligt filobjekt.
Bemærk, at yderligere filformater, som kan dekomprimeres af programmerne gzip og gunzip, f.eks. dem, der produceres afcompress og pack, ikke understøttes af dette modul.
Modulet definerer følgende elementer:
gzip.
open
(filnavn, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
Åbner en gzip-komprimeret fil i binær eller teksttilstand og returnerer et filobjekt.
Filnavn-argumentet kan være et faktisk filnavn (et str
– ellerbytes
-objekt) eller et eksisterende filobjekt, der skal læses fra eller skrives til.
Mode-argumentet kan være et af 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
eller 'xb'
for binær tilstand, eller 'rt'
,'at'
, 'wt'
eller 'xt'
for teksttilstand. Standardværdien er 'rb'
.
Det komprimerede niveau-argument er et heltal fra 0 til 9, som forGzipFile
-konstruktøren.
For binær tilstand svarer denne funktion til GzipFile
-konstruktøren: GzipFile(filename, mode, compresslevel)
. I dette tilfælde skal argumenterne kodning, fejl og newline ikke angives.
For teksttilstand oprettes et GzipFile
-objekt og indpakkes i enio.TextIOWrapper
-instans med den angivne kodning, fejlbehandlingsadfærd og linjeafslutning(er).
Ændret i version 3.3: Der blev tilføjet understøttelse af, at filnavn er et filobjekt, understøttelse af teksttilstand og argumenterne for kodning, fejl og newline.
Ændret i version 3.4: Tilføjet understøttelse af tilstande 'x'
, 'xb'
og 'xt'
.
Ændret i version 3.6: Accepterer et stilignende objekt.
undtagelsegzip.
BadGzipFile
¶
En undtagelse rejses for ugyldige gzip-filer. Den arver OSError
.EOFError
og zlib.error
kan også udløses for ugyldige gzipfiler.
Nyt i version 3.8.
klassegzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Konstruktør for GzipFile
-klassen, som simulerer de fleste af filobjektets metoder, med undtagelse af truncate()
metoden. Mindst en af fileobj og filename skal have en ikke-trivialværdi.
Den nye klasseinstans er baseret på fileobj, som kan være en almindelig fil, etio.BytesIO
objekt eller et hvilket som helst andet objekt, der simulerer en fil. Den er som standard None
, i hvilket tilfælde filnavn åbnes for at give et filobjekt.
Når fileobj ikke er None
, bruges filnavn-argumentet kun til at bliveinkluderet i gzip-filhovedet, som kan indeholde det oprindelige filnavn på den ukomprimerede fil. Det er som standard filnavnet for fileobj, hvis det kan identificeres; ellers er det som standard den tomme streng, og i dette tilfælde er det originale filnavn ikke medtaget i overskriften.
Argumentet mode kan være et af 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
eller 'xb'
, afhængigt af om filen skal læses eller skrives. Standardværdien er filobj’s tilstand, hvis den kan identificeres; ellers er standardværdien 'rb'
. I fremtidige Python-udgaver vil fileobj’s tilstand ikke blive anvendt. Det er bedre altid at angive mode for skrivning.
Bemærk, at filen altid åbnes i binær tilstand. Hvis du vil åbne en komprimeret fil i teksttilstand, skal du bruge open()
(eller omslutte din GzipFile
med en io.TextIOWrapper
).
Argumentet compresslevel er et heltal fra 0
til 9
, der styrer komprimeringsniveauet; 1
er hurtigst og giver den mindste komprimering, og 9
er langsomst og giver den største komprimering. 0
er ingen komprimering. Standardværdien er 9
.
Mtime-argumentet er et valgfrit numerisk tidsstempel, der skal skrives til det sidste ændringstidsfelt i strømmen, når der komprimeres. Det bør kun angives i komprimeringstilstand. Hvis det udelades eller None
, anvendes det aktuelle tidspunkt. Se attributten mtime
for flere detaljer.
Ansøgning af et GzipFile
-objekts close()
metode lukker ikke fileobj, da du måske ønsker at tilføje mere materiale efter de komprimerede data. Dette giver dig også mulighed for at overdrage et io.BytesIO
-objekt åbnet tilskrivning som fileobj og hente den resulterende hukommelsesbuffer ved hjælp af io.BytesIO
-objektets getvalue()
-metode.
GzipFile
understøtter io.BufferedIOBase
-grænsefladen,herunder iteration og with
-erklæringen. Kuntruncate()
-metoden er ikke implementeret.
GzipFile
indeholder også følgende metode og attribut:
peek
(n)¶
Læs n ukomprimerede bytes uden at rykke filpositionen frem.Der udføres højst én enkelt læsning på den komprimerede strøm for at tilfredsstille opkaldet. Antallet af bytes, der returneres, kan være mere eller mindre end det, der anmodes om.
Note
Mens kald peek()
ikke ændrer filpositionen for GzipFile
, kan det ændre positionen for det underliggende filobjekt (f.eks. hvis GzipFile
blev konstrueret med parameterenfileobj).
Nyt i version 3.2.
mtime
¶
Ved dekomprimering kan værdien af feltet for sidste ændringstidspunkt i den senest læste header læses fra denne attribut som et heltal. Den oprindelige værdi, før der læses nogen overskrifter, er None
.
Alle gzip-komprimerede strømme skal indeholde dette tidsstempelfelt. Nogle programmer, f.eks. gunzip, gør brug af tidsstemplet. Formatet er det samme som returværdien af time.time()
og st_mtime
-attributten i det objekt, der returneres af os.stat()
.
Ændret i version 3.1: Der blev tilføjet understøttelse af with
-erklæringen sammen med themtime-konstruktørargumentet og mtime
-attributten.
Ændret i version 3.2: Der blev tilføjet understøttelse af nulpaddede og usøgbare filer.
Ændret i version 3.3: io.BufferedIOBase.read1()
-metoden er nu implementeret.
Ændret i version 3.4:
Ændret i version 3.5: Der er tilføjet understøttelse af skrivning af arbitrarybytes-lignende objekter. read()
-metoden accepterer nu et argument påNone
.
Ændret i version 3.6: Der er tilføjet understøttelse af skrivning af arbitrarybytes-lignende objekter: Accepterer et sti-lignende objekt.
Fraværende siden version 3.9: Åbning af GzipFile
til skrivning uden angivelse af modeargumentet er forældet.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Komprimerer dataene og returnerer et bytes
-objekt, der indeholder de komprimerede data. compresslevel og mtime har samme betydning som i GzipFile
konstruktøren ovenfor.
Nyt i version 3.2.
Ændret i version 3.8:
gzip.
decompress
(data)¶
Dekomprimerer dataene og returnerer et bytes
objekt, der indeholder de ukomprimerede data.
Nyt i version 3.2:
Nyt i version 3.2.
Brugseksempler¶
Eksempel på, hvordan man læser en komprimeret fil:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Eksempel på, hvordan man opretter en komprimeret GZIP-fil:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Eksempel på, hvordan man GZIP-komprimerer en eksisterende fil:
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)
Eksempel på, hvordan man GZIP-komprimerer en binær streng:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Se også
Modul zlib
Det grundlæggende datakomprimeringsmodul, der er nødvendigt for at understøtte gzip-filformatet.
Kommandolinjeinterface¶
Modulet gzip
giver en simpel kommandolinjeinterface til at komprimere ellerkomprimere filer.
Når det er udført, beholder gzip
modulet inputfil(er).
Ændret i version 3.8: Tilføj en ny kommandolinjeinterface med en anvendelse. når du udfører CLI’en, er standardkomprimeringsniveauet som standard 6.
Kommandolinjeindstillinger¶
file
¶
Hvis fil ikke er angivet, læses fra sys.stdin
.
--fast
¶
Angiver den hurtigste komprimeringsmetode (mindre komprimering).
--best
¶
Angiver den langsomste komprimeringsmetode (bedste komprimering).
-d
,
--decompress
¶
Dekomprimerer den angivne fil.
-h
,
--help
¶
Viser hjælpemeddelelsen.
Skriv et svar