Krajta

Python gzip modul

Python gzip modul

V této lekci se budeme věnovat tomu, jak můžeme Python využít gzip modul pro čtení a zápis do komprimovaných souborů v Pythonu. Největší vlastností, kterou nám tento modul poskytuje, je to, že s komprimovanými soubory můžeme zacházet jako s běžnými objekty File, což nám ušetří složitost správy souborů a jejich životního cyklu v našem kódu a umožní nám soustředit se na základní obchodní logiku programu.The gzip modul nám poskytuje téměř stejné funkce jako programy GNU gunzip a gzip.

Zápis komprimovaných souborů pomocí open ()

Začneme základním příkladem, kde můžeme vytvořit soubor gzip a zapsat do něj nějaká data. K tomu musíme vytvořit soubor a otevřít jej v režimu zápisu, aby do něj bylo možné vložit data. Podívejme se na ukázkový program, pomocí kterého můžeme zapisovat data do souboru gzip:

importovat gzip
importovat io
import os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
s gzip.otevřít (output_file, write_mode) jako výstup:
s io.TextIOWrapper (výstup, kódování = 'utf-8') jako kódování:
zakódovat.write ('Do souboru můžeme zapsat cokoli chceme.\ n ')
print (output_file,
'contains', os.stat (output_file).st_size, 'bytes')
os.system ('file -b --mime '.format (output_file))

S tímto příkazem se vrátíme:

Zápis do souboru zip

Pokud se nyní podíváte na strukturu složek, kde jste tento skript provedli, měl by existovat nový soubor s názvem, který jsme poskytli výše v našem programu.

Zápis více řádků do komprimovaného souboru

Můžeme také napsat více řádků nebo vlastně libovolný počet řádků v našem souboru gzip velmi podobným způsobem, jako jsme to udělali v předchozím příkladu. Abychom tento příklad odlišili, využijeme také modul itertools. Podívejme se na ukázkový program:

importovat gzip
importovat io
import os
import itertools
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
s gzip.otevřít (output_file, write_mode) jako výstup:
s io.TextIOWrapper (výstup, kódování = 'utf-8') jako enc:
příloha.spisy (
itertools.repeat ('LinuxHint, opakování stejného řádku!.\ n ', 10)
)
os.system ('gzcat linxhint_demo.txt.gz ')

Podívejme se na výstup tohoto příkazu:

Psaní více řádků

Čtení komprimovaných dat

Můžeme také číst komprimovaný soubor, který jsme vytvořili v posledním příkladu pomocí modulu gzip s velmi jednoduchým voláním otevřeno funkce:

importovat gzip
importovat io
import os
file_name = 'linxhint_demo.txt.gz '
file_mode = 'rb'
s gzip.otevřít (file_name, file_mode) jako input_file:
s io.TextIOWrapper (input_file, encoding = 'utf-8') jako prosinec:
tisk (pros.číst())

S tímto příkazem se vrátíme:

Čtení souboru gzip

Čtení streamů

Vzhledem k tomu, že textové soubory mohou mít velmi velkou velikost, je chytré tyto soubory otevřít v proudu, než načíst celý soubor do jediného objektu, který zabírá hodně paměti systému a v některých případech může dokonce způsobit proces úplně havarovat. Podívejme se na ukázkový program, který přečte daný komprimovaný soubor v proudu:

importovat gzip
z io importu BytesIO
importovat binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Opakovaný řádek x krát.\ n '* 8
print ('Non compressed Data:', len (non_compressed))
tisk (bez_komprimace)
buf = BytesIO ()
s gzip.GzipFile (mode = mode_write, fileobj = buf) jako soubor:
soubor.write (non_compressed)
stlačený = buf.getvalue ()
print ('Compressed Data:', len (compressed))
tisk (binascii.hexlify (komprimovaný))
in_buffer = BytesIO (komprimovaný)
s gzip.GzipFile (mode = mode_read, fileobj = in_buffer) jako soubor:
read_data = soubor.read (len (non_compressed))
print ('\ nČtení znovu:', len (read_data))
print (read_data)

Podívejme se na výstup tohoto příkazu:

Čtení souboru gzip ve streamu

Ačkoli byl program trochu dlouhý, ve skutečnosti jsme právě použili moduly Pythonu, které otevírají soubor a streamují obsah na konzolu pomocí čtecího objektu ve vyrovnávací paměti.

Závěr

V této lekci jsme se podívali na to, jak můžeme využít modul gzip Pythonu ke kompresi a dekompresi souborů v Pythonu. Největší funkcí, kterou nám tato knihovna poskytuje, je to, že s komprimovanými soubory můžeme zacházet jako s běžnými objekty File.

Přečtěte si více příspěvků založených na Pythonu zde.

Hry Nejlepší hry z příkazového řádku pro Linux
Nejlepší hry z příkazového řádku pro Linux
Příkazový řádek není při používání Linuxu jen vaším největším spojencem - může být také zdrojem zábavy, protože jej můžete použít k hraní mnoha zábavn...
Hry Nejlepší aplikace pro mapování gamepadu pro Linux
Nejlepší aplikace pro mapování gamepadu pro Linux
Pokud rádi hrajete hry na Linuxu s gamepadem místo typického vstupního systému pro klávesnici a myš, máte k dispozici několik užitečných aplikací. Mno...
Hry Užitečné nástroje pro hráče Linuxu
Užitečné nástroje pro hráče Linuxu
Pokud rádi hrajete hry na Linuxu, je pravděpodobné, že jste ke zlepšení herního zážitku použili aplikace a nástroje jako Wine, Lutris a OBS Studio. Kr...