Python Gzip -modul

Python Gzip -modul

I denne leksjonen vil vi studere om hvordan vi kan benytte oss av Python Gzip Modul for å lese og skrive inn i komprimerte filer i Python. Den største funksjonen denne modulen gir oss er at vi kan behandle komprimerte filer som normale filobjekter som lagrer oss fra kompleksiteten i å administrere filer og deres livssyklus i koden vår og lar oss fokusere på kjernevirksomhetslogikken i programmet.De Gzip Modul gir oss nesten de samme funksjonene som GNU -programmene som Gunzip og Gzip.

Skrive komprimerte filer med åpne ()

Vi starter med et grunnleggende eksempel der vi kan opprette en GZIP -fil og skrive noen data i den. For dette må vi lage en fil og åpne den med skrivemodus slik at data kan settes inn i den. La oss se på et eksempelprogram som vi kan skrive data til en GZIP -fil:

Importer gzip
Importer io
Importer OS
output_file = 'linxhint_demo.tekst.gz '
skriv_mode = 'wb'
med gzip.Åpne (output_file, writ_mode) som utgang:
med io.TextIowrapper (output, koding = 'UTF-8') som kode:
kode.Skriv ('Vi kan skrive hva vi vil til filen.\ n ')
print (output_file,
'Inneholder', OS.stat (output_file).st_size, 'byte')
OS.system ('fil -b - -mime '.Format (output_file))

Dette er hva vi kommer tilbake med denne kommandoen:

Skrive til ZIP -fil

Hvis du nå tar en titt på mappestrukturen der du utførte dette skriptet, bør det være en ny fil som er navngitt med det vi ga i programmet vårt ovenfor.

Skrive flere linjer til en komprimert fil

Vi kan også skrive flere linjer eller faktisk et hvilket som helst antall linjer i GZIP -filen vår på en veldig lik måte som vi gjorde i forrige eksempel. For å gjøre dette eksemplet annerledes, vil vi også benytte oss av iterertools -modulen. La oss se på prøveprogrammet:

Importer gzip
Importer io
Importer OS
Importer iterertools
output_file = 'linxhint_demo.tekst.gz '
skriv_mode = 'wb'
med gzip.Åpne (output_file, writ_mode) som utgang:
med io.Textiowrapper (output, koding = 'utf-8') som enc:
Enc.skriver (
iterertools.Gjenta ('Linuxhint, gjenta samme linje!.\ n ', 10)
)
OS.system ('gzcat linxhint_demo.tekst.gz ')

La oss se utdataene for denne kommandoen:

Skrive flere linjer

Lese komprimerte data

Vi kan også lese den komprimerte filen vi opprettet i det siste eksemplet ved å bruke GZIP -modulen med en veldig enkel samtale til åpen funksjon:

Importer gzip
Importer io
Importer OS
file_name = 'linxhint_demo.tekst.gz '
file_mode = 'RB'
med gzip.Åpne (filnavn, file_mode) som input_file:
med io.Textiowrapper (input_file, koding = 'utf-8') som desember:
trykk (des.lese())

Dette er hva vi kommer tilbake med denne kommandoen:

Leser en GZIP -fil

Lesestrømmer

På grunn av det faktum at tekstfiler kan være veldig store i størrelse, er det smart å åpne disse filene i en strøm i stedet for å laste inn den komplette filen i et enkelt objekt som opptar mye av systemets minne og i noen tilfeller til og med kan forårsake prosessen å krasje helt. La oss se på et eksempelprogram som leser den gitte komprimerte filen i en strøm:

Importer gzip
Fra IO Import Bytesio
Importer binascii
modus_write = 'wb'
modus_read = 'RB'
Non_Compription = B'Repeated Line X Times.\ n ' * 8
Print ('Ikke komprimerte data:', Len (ikke -komprimert))
trykk (non_komprimert)
BUF = BYTESIO ()
med gzip.Gzipfile (modus = mode_write, fileobj = buf) som fil:
fil.Skriv (ikke_komprimert)
komprimert = buf.getValue ()
print ('komprimerte data:', len (komprimert))
trykk (binascii.Hexlify (komprimert))
in_buffer = bytesio (komprimert)
med gzip.Gzipfile (modus = mode_read, fileobj = in_buffer) som fil:
read_data = fil.Les (Len (ikke -komprimert))
print ('\ nreading it igjen:', len (read_data))
print (read_data)

La oss se utdataene for denne kommandoen:

Leser Gzip -fil i en strøm

Selv om programmet var litt langt, har vi faktisk bare brukt Python -moduler åpne filen og strømmer innholdet på konsollen med et bufret leserobjekt.

Konklusjon

I denne leksjonen så vi på hvordan vi kan benytte oss av Python Gzip -modul for å komprimere og dekomprimere filer i Python. Den største funksjonen dette biblioteket gir oss er at vi kan behandle komprimerte filer som normale filobjekter.

Les mer Python -baserte innlegg her.