V tej lekciji bomo preučili, kako lahko uporabimo Python gzip modul za branje in pisanje v stisnjene datoteke v Pythonu. Največja značilnost, ki nam jo ponuja ta modul, je, da lahko stisnjene datoteke obravnavamo kot običajne datoteke, kar nas reši zapletenosti upravljanja datotek in njihovega življenjskega cikla v naši kodi ter nam omogoča, da se osredotočimo na osnovno poslovno logiko programa.The gzip modul nam zagotavlja skoraj enake funkcije kot programi GNU gunzip in gzip.
Pisanje stisnjenih datotek z open ()
Začeli bomo z osnovnim primerom, kjer lahko ustvarimo datoteko gzip in vanjo zapišemo nekaj podatkov. Za to moramo narediti datoteko in jo odpreti z načinom pisanja, da lahko vanjo vstavimo podatke. Oglejmo si vzorčni program, s katerim lahko zapisujemo podatke v datoteko gzip:
uvoz gzipuvoz io
uvoz os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
z gzip.odpri (output_file, write_mode) kot izhod:
z io.TextIOWrapper (izhod, kodiranje = 'utf-8') kot kodiranje:
kodiraj.write ('V datoteko lahko zapišemo vse, kar želimo.\ n ')
print (izhodna_datoteka,
'vsebuje', os.stat (izhodna_datoteka).st_size, 'bytes')
os.system ('datoteka -b --mime '.format (izhodna_datoteka))
Tukaj dobimo s tem ukazom:
Pisanje v zip datoteko
Če si zdaj ogledate strukturo map, v kateri ste izvedli ta skript, bi morala biti nova datoteka z imenom, ki smo ga navedli v zgornjem programu.
Zapisovanje več vrstic v stisnjeno datoteko
V našo datoteko gzip lahko napišemo tudi več vrstic ali dejansko poljubno število vrstic na zelo podoben način, kot smo to storili v prejšnjem primeru. Da bi bil ta primer drugačen, bomo uporabili tudi modul itertools. Oglejmo si vzorčni program:
uvoz gzipuvoz io
uvoz os
uvoz itertools
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
z gzip.odpri (output_file, write_mode) kot izhod:
z io.TextIOWrapper (output, encoding = 'utf-8') kot enc:
enc.pisalne črte (
itertools.repeat ('LinuxHint, ponavljanje iste vrstice!.\ n ', 10)
)
os.sistem ('gzcat linxhint_demo.txt.gz ')
Poglejmo izhod za ta ukaz:
Pisanje več vrstic
Branje stisnjenih podatkov
Stisnjeno datoteko, ki smo jo ustvarili v zadnjem primeru, lahko preberemo tudi z modulom gzip z zelo preprostim klicem odprto funkcija:
uvoz gzipuvoz io
uvoz os
file_name = 'linxhint_demo.txt.gz '
file_mode = 'rb'
z gzip.odpri (ime_datoteke, način_datoteke) kot vhodno_datoteko:
z io.TextIOWrapper (input_file, encoding = 'utf-8') kot dec:
tisk (dec.preberi ())
Tukaj dobimo s tem ukazom:
Branje gzip datoteke
Branje tokov
Ker so besedilne datoteke lahko zelo velike, je pametno te datoteke odpreti v toku, namesto da bi celotno datoteko naložili v en sam predmet, ki zaseda veliko sistemskega pomnilnika in v nekaterih primerih lahko celo povzroči postopek da se popolnoma zruši. Oglejmo si vzorčni program, ki bere dano stisnjeno datoteko v toku:
uvoz gzipiz io uvoziti BytesIO
uvoz binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Ponovljena vrstica x krat.\ n '* 8
print ('Nestisnjeni podatki:', len (non_compressed))
tiskanje (nestisnjeno)
buf = BytesIO ()
z gzip.GzipFile (mode = mode_write, fileobj = buf) kot datoteka:
mapa.pisanje (nestisnjeno)
stisnjeno = buf.getvalue ()
print ('Stisnjeni podatki:', len (stisnjen))
tisk (binascii.hexlify (stisnjen))
in_buffer = BytesIO (stisnjen)
z gzip.GzipFile (mode = mode_read, fileobj = in_buffer) kot datoteka:
read_data = datoteka.branje (len (nestisnjeno))
print ('\ nPonovno branje:', len (read_data))
tiskanje (branje_podatkov)
Poglejmo izhod za ta ukaz:
Branje gzip datoteke v toku
Čeprav je bil program nekoliko dolg, smo pravzaprav pravkar uporabili module Python, da odpremo datoteko in vsebino preusmerimo na konzolo z medpomnjenim bralnim objektom.
Zaključek
V tej lekciji smo preučili, kako lahko uporabimo Python gzip modul za stiskanje in razpakiranje datotek v Pythonu. Največja značilnost, ki nam jo ponuja ta knjižnica, je, da lahko stisnjene datoteke obravnavamo kot običajne datoteke.
Preberite več objav na osnovi Pythona tukaj.