Python

Modul gzip v jazyku Python

Modul gzip v jazyku Python

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 gzip
dovoz 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 gzip
dovoz 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 gzip
dovoz 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 gzip
z 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.

Hry Najlepšie hry z príkazového riadku pre systém Linux
Najlepšie hry z príkazového riadku pre systém Linux
Príkazový riadok nie je pri použití systému Linux iba vaším najväčším spojencom - môže byť tiež zdrojom zábavy, pretože ho môžete použiť na hranie mno...
Hry Najlepšie aplikácie na mapovanie gamepadu pre Linux
Najlepšie aplikácie na mapovanie gamepadu pre Linux
Ak radi hráte hry v systéme Linux s gamepadom namiesto typického systému vstupu pre klávesnicu a myš, máte tu niekoľko užitočných aplikácií. Mnoho hie...
Hry Užitočné nástroje pre hráčov systému Linux
Užitočné nástroje pre hráčov systému Linux
Ak radi hráte hry v systéme Linux, je pravdepodobné, že ste na vylepšenie herného zážitku použili aplikácie a pomôcky ako Wine, Lutris a OBS Studio. O...