Python

Python gzip modul

Python gzip modul

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 gzip
uvoz 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 gzip
uvoz 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 gzip
uvoz 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 gzip
iz 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.

OpenTTD vs Simutrans
Ustvarjanje lastne simulacije prevoza je lahko zabavno, sproščujoče in izjemno vabljivo. Zato morate preizkusiti čim več iger, da boste našli tisto, k...
Vadnica za OpenTTD
OpenTTD je ena izmed najbolj priljubljenih poslovnih simulacijskih iger. V tej igri morate ustvariti čudovit prevozniški posel. Vendar boste začeli na...
SuperTuxKart za Linux
SuperTuxKart je odličen naslov, zasnovan tako, da vam brezplačno ponuja izkušnjo Mario Kart v vašem sistemu Linux. Igrati je precej zahtevno in zabavn...