gzip – Stöd för gzip-filer¶
On november 24, 2021 by adminKällkod: Lib/gzip.py
Denna modul tillhandahåller ett enkelt gränssnitt för att komprimera och dekomprimera filer på samma sätt som GNU-programmen gzip och gunzip skulle göra.
Datakomprimeringen tillhandahålls av modulen zlib
.
Modulen gzip
tillhandahåller klassen GzipFile
samt bekvämlighetsfunktionerna open()
, compress()
och decompress()
.Klassen GzipFile
läser och skriver filer i gzip-format och komprimerar eller dekomprimerar automatiskt uppgifterna så att de ser ut som ett vanligt filobjekt.
Bemärk att ytterligare filformat som kan dekomprimeras av programmengzip och gunzip, t.ex. de som produceras avcompress och pack, inte stöds av denna modul.
Modulen definierar följande objekt:
gzip.
open
(filnamn, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
Öppnar en gzip-komprimerad fil i binärt läge eller textläge och returnerar ett filobjekt.
Argumentet filnamn kan vara ett faktiskt filnamn (ett str
ellerbytes
objekt), eller ett befintligt filobjekt att läsa från eller skriva till.
Argumentet mode kan vara något av 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
eller 'xb'
för binärt läge, eller 'rt'
,'at'
, 'wt'
eller 'xt'
för textläge. Standardvärdet är 'rb'
.
Argumentet compresslevel är ett heltal från 0 till 9, som för konstruktörenGzipFile
.
För binärt läge är den här funktionen likvärdig med konstruktören GzipFile
: GzipFile(filename, mode, compresslevel)
. I det här fallet får argumenten för kodning, fel och ny rad inte anges.
För textläge skapas ett GzipFile
-objekt och det förpackas i en io.TextIOWrapper
-instans med angiven kodning, felhanteringsbeteende och radändning(ar).
Ändrad i version 3.3: Läggs till stöd för att filnamn är ett filobjekt, stöd för textläge och argumenten för kodning, fel och ny rad.
Ändrad i version 3.4:
Förändring i version 3.6: Stöd för lägena 'x'
, 'xb'
och 'xt'
har lagts till:
undantaggzip.
BadGzipFile
¶
Ett undantag för ogiltiga gzip-filer. Det ärver OSError
.EOFError
och zlib.error
kan också tas upp för ogiltiga gzipfiler.
Nytt i version 3.8.
classgzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Konstruktör för GzipFile
-klassen, som simulerar de flesta av filobjektets metoder, med undantag för truncate()
metoden. Minst en av fileobj och filename måste ges ett icke-trivialt värde.
Den nya klassinstansen baseras på fileobj, som kan vara en vanlig fil, ettio.BytesIO
-objekt eller något annat objekt som simulerar en fil. Den är som standard None
, i vilket fall filnamn öppnas för att tillhandahålla ett filobjekt.
När fileobj inte är None
används filnamnsargumentet endast för att inkluderas i gzip-filhuvudet, vilket kan inkludera originalfilnamnet på den okomprimerade filen. Det är standard till filnamnet för fileobj, om det går att urskilja; annars är det standard till den tomma strängen, och i detta fall inkluderas inte det ursprungliga filnamnet i huvudet.
Argumentet mode kan vara något av 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
, eller 'xb'
, beroende på om filen kommer att läsas eller skrivas. Standardvärdet är läget för fileobj om det går att urskilja, annars är standardvärdet 'rb'
. I framtida Pythonversioner kommer läget för fileobj inte att användas. Det är bättre att alltid ange läge för skrivning.
Notera att filen alltid öppnas i binärt läge. Om du vill öppna en komprimerad fil i textläge använder du open()
(eller omsluter din GzipFile
med en io.TextIOWrapper
).
Argumentet compresslevel är ett heltal från 0
till 9
som kontrollerar komprimeringsnivån; 1
är snabbast och ger minst komprimering, och 9
är långsammast och ger mest komprimering. 0
är ingen komprimering. Standardvärdet är 9
.
Argumentet mtime är en valfri numerisk tidsstämpel som ska skrivas till fältet för den senaste modifieringstiden i strömmen vid komprimering. Det bör endast anges i komprimeringsläge. Om det utelämnas eller None
används den aktuella tiden. Se attributet mtime
för mer information.
Att anropa ett GzipFile
objekts close()
metod stänger inte fileobj, eftersom du kanske vill lägga till mer material efter de komprimerade uppgifterna. Detta gör det också möjligt att överlämna ett io.BytesIO
-objekt som öppnats för skrivning som fileobj, och hämta den resulterande minnesbufferten med hjälp av io.BytesIO
-objektets getvalue()
-metod.
GzipFile
har stöd för io.BufferedIOBase
-gränssnittet, inklusive iteration och with
-angivelsen. Endast metodentruncate()
är inte implementerad.
GzipFile
tillhandahåller också följande metod och attribut:
peek
(n)¶
Läs n okomprimerade bytes utan att flytta fram filpositionen.Högst en enda läsning av den komprimerade strömmen görs för att uppfylla anropet. Antalet bytes som returneras kan vara mer eller mindre än vad som begärs.
Notera
Och även om anropet peek()
inte ändrar filpositionen för GzipFile
, kan det ändra positionen för det underliggande filobjektet (t.ex. om GzipFile
konstruerades med parameternfileobj).
Nytt i version 3.2.
mtime
¶
När du dekomprimerar kan värdet av fältet för senaste modifieringstid i den senast lästa rubriken läsas från det här attributet, som ett heltal. Det ursprungliga värdet innan några rubriker läses är None
.
Alla gzip-komprimerade strömmar måste innehålla detta fält för tidsstämpel. Vissa program, t.ex. gunzip, använder sig av tidsstämpeln. Formatet är detsamma som returvärdet av time.time()
och attributet st_mtime
i det objekt som returneras av os.stat()
.
Ändrat i version 3.1: Stöd för with
-angivelsen har lagts till, tillsammans med konstruktörsargumentet themtime och attributet mtime
.
Ändrat i version 3.2: Stöd för nollpaddade och osökbara filer har lagts till.
Ändrat i version 3.3: Metoden io.BufferedIOBase.read1()
är nu implementerad.
Ändrat i version 3.4:
Ändrad i version 3.5: Stöd för att skriva godtyckliga bytes-liknande objekt har lagts till.Metoden read()
accepterar nu ett argument av None
.
Ändrad i version 3.6:
Deprecated since version 3.9: Opening GzipFile
for writing without specifying the modeargument is deprecated.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Komprimera data och returnera ett bytes
-objekt som innehåller de komprimerade data. compresslevel och mtime har samma betydelse som i GzipFile
konstruktorn ovan.
Nytt i version 3.2.
Förändras i version 3.8:
gzip.
decompress
(data)¶
Dekomprimera data och returnera ett bytes
objekt som innehåller de okomprimerade data.
Nytt i version 3.2.
Användningsexempel¶
Exempel på hur man läser en komprimerad fil:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Exempel på hur man skapar en komprimerad GZIP-fil:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Exempel på hur man GZIP-komprimerar en befintlig 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)
Exempel på hur man GZIP-komprimerar en binär sträng:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Se även
Modul zlib
Den grundläggande modulen för datakomprimering som behövs för att stödja filformatet gzip.
Kommandoradsgränssnitt¶
Modulen gzip
ger ett enkelt kommandoradsgränssnitt för att komprimera ellerkomprimera filer.
När den väl har utförts behåller modulen gzip
ingångsfilen eller ingångsfilerna.
Ändrat i version 3.8: När du kör CLI är standardkomprimeringsnivån 6.
Optioner för kommandoraden¶
file
¶
Om filen inte anges, läses från sys.stdin
.
--fast
¶
Anger den snabbaste komprimeringsmetoden (mindre komprimering).
--best
¶
Anger den långsammaste komprimeringsmetoden (bästa komprimering).
-d
,
--decompress
¶
Dekomprimera den angivna filen.
-h
,
--help
¶
Visa hjälpmeddelandet.
Lämna ett svar