gzip – Podpora souborů gzip¶
On 24 listopadu, 2021 by adminZdrojový kód:
Tento modul poskytuje jednoduché rozhraní pro kompresi a dekompresi souborů stejně jako programy GNU gzip a gunzip.
Komprimaci dat zajišťuje modul zlib
.
Modul gzip
poskytuje třídu GzipFile
a také komfortní funkceopen()
, compress()
a decompress()
.Třída GzipFile
čte a zapisuje soubory ve formátu gzip,automaticky komprimuje nebo dekomprimuje data tak, aby vypadala jako běžný objekt souboru.
Všimněte si, že další formáty souborů, které mohou být dekomprimovány programygzip a gunzip, jako například formáty vytvořené programycompress a pack, nejsou tímto modulem podporovány.
Modul definuje následující položky:
gzip.
open
(jméno souboru, mode=’rb‘, compresslevel=9, encoding=None, errors=None, newline=None)¶
Otevře soubor komprimovaný pomocí gzip v binárním nebo textovém režimu a vrátí objekt souboru.
Argumentem jméno souboru může být skutečné jméno souboru (objekt str
nebobytes
) nebo existující objekt souboru, ze kterého se má číst nebo do kterého se má zapisovat.
Argument režim může být některý z 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
nebo 'xb'
pro binární režim nebo 'rt'
,'at'
, 'wt'
nebo 'xt'
pro textový režim. Výchozí hodnota je 'rb'
.
Argument compresslevel je celé číslo od 0 do 9, stejně jako u konstruktoruGzipFile
.
Pro binární režim je tato funkce ekvivalentní konstruktoru GzipFile
: GzipFile(filename, mode, compresslevel)
. V tomto případě nesmí být uvedeny argumentyenkódování, chyby a nový řádek.
Pro textový režim je vytvořen objekt GzipFile
a zabalen do instanceio.TextIOWrapper
se zadaným kódováním, chováním při zpracování chyb a koncovkou (koncovkami) řádku.
Změněno ve verzi 3.3: Přidána podpora pro název souboru jako objekt souboru, podpora pro textový režim,a argumenty kódování, chyb a nového řádku.
Změněno ve verzi 3.4:
Změněno ve verzi 3.6: Přidána podpora režimů 'x'
, 'xb'
a 'xt'
: Přijímá objekt podobný cestě.
výjimkagzip.
BadGzipFile
¶
Vyvolána výjimka pro neplatné soubory gzip. Dědí po OSError
.EOFError
a zlib.error
Může být také vyvolána pro neplatné gzip soubory.
Nové ve verzi 3.8.
třídagzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Konstruktor pro třídu GzipFile
, která simuluje většinu metod objektu souboru, s výjimkou metody truncate()
. Alespoň jeden z objektů fileobj a filename musí mít netriviální hodnotu.
Nová instance třídy je založena na objektu fileobj, což může být běžný soubor, objektio.BytesIO
nebo jakýkoli jiný objekt, který simuluje soubor. Výchozí hodnota je None
, v takovém případě se otevře název souboru, aby poskytl objekt souboru.
Když souborobj není None
, argument název souboru se použije pouze pro zahrnutí do hlavičky souboru gzip, která může obsahovat původní název nekomprimovaného souboru. Ve výchozím nastavení je to jméno souboru fileobj, pokud je rozeznatelné; v opačném případě je to prázdný řetězec a v tomto případě není původní jméno souboru do hlavičky zahrnuto.
Argument mode může být libovolný z 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
nebo 'xb'
, podle toho, zda se soubor bude číst nebo zapisovat. Výchozí je režim souboruobj, pokud je rozeznatelný; jinak je výchozí 'rb'
. V příštích verzích Pythonu se režim fileobj nebude používat. Je lepší vždy zadat režim pro zápis.
Všimněte si, že soubor je vždy otevřen v binárním režimu. Chcete-li otevřít komprimovaný soubor v textovém režimu, použijte open()
(nebo obalte GzipFile
znakemio.TextIOWrapper
).
Argument compresslevel je celé číslo od 0
do 9
, které řídí úroveň komprese; 1
je nejrychlejší a vytváří nejmenší kompresi a 9
je nejpomalejší a vytváří největší kompresi. 0
je bez komprese. Výchozí hodnota je 9
.
Argument mtime je nepovinný číselný časový údaj, který se při kompresi zapíše do pole času poslední modifikace v datovém toku. Měl by být uveden pouze v režimu komprese. Pokud je vynechán nebo None
, použije se aktuální čas. Další podrobnosti naleznete v atributu mtime
.
Voláním metody GzipFile
objektu close()
se neuzavřefileobj, protože byste mohli chtít za komprimovanádata připojit další materiál. To také umožňuje předat objekt io.BytesIO
otevřený pro zápis jako fileobj a získat výslednou vyrovnávací paměť pomocí metody getvalue()
objektu io.BytesIO
.
GzipFile
podporuje rozhraní io.BufferedIOBase
,včetně iterace a příkazu with
. Pouze metodatruncate()
není implementována.
GzipFile
také poskytuje následující metodu a atribut:
peek
(n)¶
Čte n nekomprimovaných bajtů bez posunutí pozice souboru. pro splnění volání se provede maximálně jedno jediné čtení komprimovaného proudu. Počet vrácených bajtů může být větší nebo menší nežpožadovaný.
Poznámka
Přestože volání peek()
nezmění pozici souboru GzipFile
, může změnit pozici podkladového objektu souboru (např. pokud byl GzipFile
vytvořen s parametremfileobj).
Novinka ve verzi 3.2.
mtime
¶
Při dekomprimaci lze z tohoto atributu vyčíst hodnotu pole času poslední modifikace v naposledy čtené hlavičce jako celé číslo. Počáteční hodnota před načtením jakýchkoli hlaviček je None
.
Všechny gzip komprimované toky musí obsahovat pole časové značky. Některé programy, například gunzip, časové razítko využívají. Formát je stejný jako návratová hodnota příkazutime.time()
a atribut st_mtime
objektu vráceného příkazem os.stat()
.
Změněno ve verzi 3.1: Byla přidána podpora příkazu with
a argumentu konstruktorutime a atributu mtime
.
Změněno ve verzi 3.2: Byla přidána podpora souborů s nulovým polštářem a souborů, které nelze vyhledat.
Změněno ve verzi 3.3: Byla implementována metoda io.BufferedIOBase.read1()
.
Změněno ve verzi 3.4:
Změněno ve verzi 3.5: Přidána podpora pro zápis objektů typu arbitrarybytes.Metoda read()
nyní přijímá argumentNone
.
Změněno ve verzi 3.6:
Odstraněno od verze 3.9: Otevření GzipFile
pro zápis bez zadání modeargumentu je zastaralé.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Komprimuje data a vrací objekt bytes
obsahující komprimovaná data. Compresslevel a mtime mají stejný význam jako ve výše uvedeném konstruktoru GzipFile
.
Novinka ve verzi 3.2.
Změněno ve verzi 3.8: Přidán parametr mtime pro reprodukovatelný výstup.
gzip.
decompress
(data)¶
Dekomprimuje data a vrací objekt bytes
obsahující nekomprimovaná data.
Nové ve verzi 3.2.
Příklady použití¶
Příklad načtení komprimovaného souboru:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Příklad vytvoření komprimovaného souboru GZIP:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Příklad komprese existujícího souboru GZIP:
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)
Příklad, jak GZIP komprimovat binární řetězec:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Viz také
Modul zlib
Základní modul komprese dat potřebný pro podporu formátu souboru gzip.
Rozhraní příkazového řádku¶
Modul gzip
poskytuje jednoduché rozhraní příkazového řádku pro kompresi řádkových souborů.
Po spuštění modul gzip
uchovává vstupní soubor(y).
Změněno ve verzi 3.8:
Volby příkazového řádku¶
file
¶
Pokud není soubor zadán, čte se z sys.stdin
.
--fast
¶
Určuje nejrychlejší metodu komprese (menší komprese).
--best
¶
Určuje nejpomalejší metodu komprese (nejlepší komprese).
-d
,
--decompress
¶
Dekomprimuje zadaný soubor.
-h
,
--help
¶
Zobrazí nápovědu.
.
Napsat komentář