V tejto lekcii sa budeme venovať tomu, ako môžeme využiť Python gzip modul na čítanie a zápis do komprimovaných súborov v Pythone. Najväčšou vlastnosťou, ktorú nám tento modul poskytuje, je to, že s komprimovanými súbormi môžeme zaobchádzať ako s bežnými objektmi súborov, čo nás ušetrí od zložitosti správy súborov a ich životného cyklu v našom kóde a umožní nám zamerať sa na hlavnú obchodnú logiku programu.The gzip modul nám poskytuje takmer rovnaké funkcie ako programy GNU gunzip a gzip.
Zápis komprimovaných súborov pomocou open ()
Začneme základným príkladom, kde môžeme vytvoriť súbor gzip a zapísať doň nejaké údaje. Za týmto účelom musíme vytvoriť súbor a otvoriť ho v režime zápisu, aby sa do neho mohli vkladať údaje. Pozrime sa na ukážkový program, pomocou ktorého môžeme zapisovať údaje do súboru gzip:
import gzipdovoz io
import os
output_file = 'linxhint_demo.TXT.gz '
write_mode = 'wb'
s gzip.otvorte (output_file, write_mode) ako výstup:
s io.TextIOWrapper (výstup, kódovanie = 'utf-8') ako kódovanie:
zakódovať.write ('Do súboru môžeme napísať čokoľvek, čo chceme.\ n ')
print (output_file,
„obsahuje“, os.stat (output_file).st_size, 'bytes')
os.system ('subor -b --mime '.format (output_file))
S týmto príkazom sa dostaneme späť:
Zápis do zip súboru
Ak sa teraz pozriete na štruktúru priečinkov, kde ste spustili tento skript, mal by existovať nový súbor s názvom, ktorý sme poskytli v našom programe vyššie.
Zápis viacerých riadkov do komprimovaného súboru
Môžeme tiež napísať viac riadkov alebo vlastne akýkoľvek počet riadkov do nášho súboru gzip veľmi podobným spôsobom, ako sme to urobili v predchádzajúcom príklade. Aby sme tento príklad odlíšili, využijeme tiež modul itertools. Pozrime sa na ukážkový program:
import gzipdovoz io
import os
import itertools
output_file = 'linxhint_demo.TXT.gz '
write_mode = 'wb'
s gzip.otvorené (output_file, write_mode) ako výstup:
s io.TextIOWrapper (výstup, kódovanie = 'utf-8') ako príloha:
príloha.spisové linky (
itertools.repeat ('LinuxHint, opakujúci sa ten istý riadok!.\ n ', 10)
)
os.system ('gzcat linxhint_demo.TXT.gz ')
Pozrime sa na výstup pre tento príkaz:
Písanie viacerých riadkov
Čítanie komprimovaných údajov
Môžeme tiež prečítať komprimovaný súbor, ktorý sme vytvorili v poslednom príklade pomocou modulu gzip, s veľmi jednoduchým volaním na otvorené funkcia:
import gzipdovoz io
import os
file_name = 'linxhint_demo.TXT.gz '
file_mode = 'rb'
s gzip.otvorte (názov súboru, režim súboru) ako vstupný súbor:
s io.TextIOWrapper (input_file, encoding = 'utf-8') ako dec:
tlač (dec.čítať())
S týmto príkazom sa dostaneme späť:
Čítanie súboru gzip
Čítanie streamov
Vzhľadom na to, že textové súbory môžu mať veľmi veľkú veľkosť, je rozumné tieto súbory otvárať v prúde, a nie načítať celý súbor do jedného objektu, ktorý zaberá veľa pamäte systému a v niektorých prípadoch môže dokonca spôsobiť tento proces. úplne havarovať. Pozrime sa na ukážkový program, ktorý načítal daný komprimovaný súbor v streame:
import gzipz io importu BytesIO
import binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Opakovaný riadok x-krát.\ n '* 8
print ('Non compressed Data:', len (non_compressed))
tlačiť (nekomprimované)
buf = BytesIO ()
s gzip.GzipFile (mode = mode_write, fileobj = buf) ako súbor:
spis.zápis (bez_komprimácie)
stlačený = buf.getvalue ()
print ('Compressed Data:', len (compressed))
tlačiť (binascii.hexlify (komprimované))
in_buffer = BytesIO (komprimovaný)
s gzip.GzipFile (mode = mode_read, fileobj = in_buffer) ako súbor:
read_data = súbor.prečítané (len (nekomprimované))
print ('\ nČítanie znova:', len (read_data))
print (read_data)
Pozrime sa na výstup pre tento príkaz:
Čítanie súboru gzip v streame
Aj keď bol program trochu dlhý, v skutočnosti sme práve použili moduly Pythonu, ktoré otvorili súbor a obsah preniesli na konzolu pomocou čítacieho objektu vo vyrovnávacej pamäti.
Záver
V tejto lekcii sme sa pozreli na to, ako môžeme využiť modul Python gzip na kompresiu a dekompresiu súborov v Pythone. Najväčšou vlastnosťou, ktorú nám táto knižnica poskytuje, je to, že s komprimovanými súbormi môžeme zaobchádzať ako s bežnými objektmi súborov.
Prečítajte si viac príspevkov založených na Pythone tu.