U ovoj ćemo lekciji proučavati kako možemo koristiti Python gzip modul za čitanje i pisanje u komprimirane datoteke u Pythonu. Najveća značajka koju nam ovaj modul pruža je da komprimirane datoteke možemo tretirati kao uobičajene datoteke, što nas spašava složenosti upravljanja datotekama i njihovim životnim ciklusom u našem kodu i omogućuje nam da se usredotočimo na osnovnu poslovnu logiku programa.The gzip modul pruža nam gotovo iste značajke kao što su GNU programi gunzip i gzip.
Pisanje komprimiranih datoteka s open ()
Počet ćemo s osnovnim primjerom gdje možemo stvoriti gzip datoteku i u nju upisati neke podatke. Za to moramo napraviti datoteku i otvoriti je s načinom pisanja kako bi se u nju mogli umetnuti podaci. Pogledajmo primjer programa pomoću kojeg podatke možemo zapisati u gzip datoteku:
uvoz gzipuvoz io
uvoz os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
sa gzipom.otvorite (output_file, write_mode) kao izlaz:
s io.TextIOWrapper (izlaz, kodiranje = 'utf-8') kao kodiranje:
kodirati.write ('U datoteku možemo upisati sve što želimo.\ n ')
ispis (output_file,
'sadrži', os.stat (izlazna_datoteka).st_size, 'bajtovi')
os.sustav ('datoteka -b --mime '.format (izlazna_datoteka))
Evo što vraćamo ovom naredbom:
Zapisivanje u zip datoteku
Ako sada pogledate strukturu mapa u kojoj ste izvršili ovu skriptu, trebala bi postojati nova datoteka s imenom s onim što smo naveli u našem programu iznad.
Zapisivanje više redaka u komprimiranu datoteku
Također možemo napisati više redaka ili zapravo bilo koji broj redaka u našu gzip datoteku na vrlo sličan način kao što smo to učinili u prethodnom primjeru. Da bismo ovaj primjer učinili drugačijim, poslužit ćemo se i modulom itertools. Pogledajmo primjer programa:
uvoz gzipuvoz io
uvoz os
uvoz itertools
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
sa gzipom.otvorite (output_file, write_mode) kao izlaz:
s io.TextIOWrapper (izlaz, kodiranje = 'utf-8') kao enc:
enk.linije za pisanje (
itertools.repeat ('LinuxHint, ponavljanje istog retka!.\ n ', 10)
)
os.sustav ('gzcat linxhint_demo.txt.gz ')
Pogledajmo izlaz za ovu naredbu:
Pisanje više redaka
Čitanje komprimiranih podataka
Također možemo čitati komprimiranu datoteku koju smo stvorili u posljednjem primjeru pomoću gzip modula s vrlo jednostavnim pozivom na otvorena funkcija:
uvoz gzipuvoz io
uvoz os
file_name = 'linxhint_demo.txt.gz '
file_mode = 'rb'
sa gzipom.otvori (ime_datoteke, način_datoteke) kao ulaznu_datoteku:
s io.TextIOWrapper (input_file, encoding = 'utf-8') u dec:
ispis (dec.čitati())
Evo što vraćamo ovom naredbom:
Čitanje gzip datoteke
Potoci za čitanje
S obzirom na činjenicu da tekstualne datoteke mogu biti vrlo velike, pametno je otvoriti ih u streamu, a ne učitavati cjelovitu datoteku u jedan objekt koji zauzima puno sistemske memorije, a u nekim slučajevima može čak uzrokovati proces da se potpuno sruši. Pogledajmo primjer programa koji čita zadanu komprimiranu datoteku u toku:
uvoz gzipiz io uvoza BytesIO
uvoz binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Ponovljeni redak x puta.\ n '* 8
print ('Nekomprimirani podaci:', len (non_compressed))
ispis (nekomprimirano)
buf = BytesIO ()
sa gzipom.GzipFile (mode = mode_write, fileobj = buf) kao datoteka:
datoteka.pisanje (nekomprimirano)
stisnuto = buf.getvalue ()
print ('Komprimirani podaci:', len (komprimirani))
ispis (binascii.hexlify (komprimirani))
in_buffer = BytesIO (komprimirani)
sa gzipom.GzipFile (mode = mode_read, fileobj = in_buffer) kao datoteka:
read_data = datoteka.čitanje (len (nekomprimirano))
print ('\ nPonovno čitanje:', len (read_data))
ispis (čitaj_podatke)
Pogledajmo izlaz za ovu naredbu:
Čitanje gzip datoteke u streamu
Iako je program bio malo dugačak, zapravo smo samo koristili Python module kako bismo otvorili datoteku i preusmjerili sadržaj na konzolu s međuspremnikom čitača.
Zaključak
U ovoj smo lekciji pogledali kako možemo koristiti Python gzip modul za komprimiranje i dekompresiju datoteka u Pythonu. Najveća značajka koju nam nudi ova knjižnica je ta da komprimirane datoteke možemo tretirati kao normalne datoteke.
Ovdje pročitajte više postova temeljenih na Pythonu.