Python

Python gzip modulis

Python gzip modulis

Šajā nodarbībā mēs pētīsim, kā mēs varam izmantot Python gzip modulis, lai lasītu un ierakstītu Python saspiestajos failos. Lielākā iezīme, ko mums nodrošina šis modulis, ir tā, ka saspiestos failus varam apstrādāt kā parastus failu objektus, kas ietaupa mūs no failu pārvaldības sarežģītības un to dzīves cikla mūsu kodā un ļauj mums koncentrēties uz programmas pamata biznesa loģiku.The gzip modulis nodrošina mums gandrīz tādas pašas funkcijas kā GNU programmas, piemēram, gunzip un gzip.

Saspiestu failu rakstīšana ar atvērtu ()

Mēs sāksim ar pamata piemēru, kur mēs varam izveidot gzip failu un tajā ierakstīt dažus datus. Lai to izdarītu, mums ir jāizveido fails un jāatver tas ar rakstīšanas režīmu, lai tajā varētu ievietot datus. Apskatīsim programmas paraugu, ar kuru mēs varam ierakstīt datus gzip failā:

importēt gzip
importa io
importēt os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
ar gzip.atvērt (izejas_fails, rakstīšanas_režīms) kā izvadi:
ar io.TextIOWrapper (izvade, kodējums = 'utf-8') kā kodējums:
kodēt.write ('Mēs varam ierakstīt failā visu, ko vēlamies.\ n ')
drukāt (izejas_fails,
'satur', os.stat (output_file).st_size, 'baiti')
os.sistēma ('file -b --mime '.formāts (izvades_fails))

Lūk, ko mēs atgūsim ar šo komandu:

Rakstīšana ZIP failā

Ja tagad apskatīsit mapju struktūru, kurā izpildījāt šo skriptu, vajadzētu būt jaunam failam ar nosaukumu, ko mēs norādījām iepriekš mūsu programmā.

Vairāku rindiņu ierakstīšana saspiestā failā

Mēs varam arī ierakstīt vairākas rindiņas vai faktiski jebkuru rindu skaitu mūsu gzip failā ļoti līdzīgā veidā, kā mēs to darījām iepriekšējā piemērā. Lai padarītu šo piemēru atšķirīgu, mēs izmantosim arī itertools moduli. Apskatīsim programmas paraugu:

importēt gzip
importa io
importēt os
importēt itertoolus
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
ar gzip.atvērts (izejas_fails, rakstīšanas_raksts) kā izvads:
ar io.TextIOWrapper (izvade, kodējums = 'utf-8') kā enc:
enc.rakstu līnijas (
itertools.atkārtot ('LinuxHint, atkārtojot to pašu rindu!.\ n ', 10)
)
os.sistēma ('gzcat linxhint_demo.txt.gz ')

Apskatīsim šīs komandas izvadi:

Vairāku rindiņu rakstīšana

Saspiestu datu lasīšana

Mēs varam arī izlasīt saspiesto failu, kuru izveidojām pēdējā piemērā, izmantojot moduli gzip ar ļoti vienkāršu zvanu uz atvērts funkcija:

importēt gzip
importa io
importēt os
faila_nosaukums = 'linxhint_demo.txt.gz '
file_mode = 'rb'
ar gzip.atvērt (faila_nosaukums, faila_raksts) kā ievades_fails:
ar io.TextIOWrapper (ievades_fails, kodējums = 'utf-8') kā dec:
izdruka (dec.lasīt ())

Lūk, ko mēs atgūsim ar šo komandu:

Gzip faila lasīšana

Straumju lasīšana

Sakarā ar to, ka teksta faili var būt ļoti lieli, ir gudri atvērt šos failus straumē, nevis ielādēt visu failu vienā objektā, kas aizņem daudz sistēmas atmiņas un dažos gadījumos var pat izraisīt procesu pilnībā avarēt. Apskatīsim programmas paraugu, kas straumē nolasa doto saspiesto failu:

importēt gzip
no io importa BytesIO
importēt binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Atkārtota rinda x reizes.\ n '* 8
drukāt ('Nesaspiesti dati:', len (nesaspiesti))
drukāt (nesaspiesta)
buf = BytesIO ()
ar gzip.GzipFile (mode = mode_write, fileobj = buf) kā fails:
failu.rakstīt (nesaspiests)
saspiests = buf.getvalue ()
drukāt ('Saspiesti dati:', len (saspiests))
drukāt (binascii.hexlify (saspiests))
in_buffer = BytesIO (saspiests)
ar gzip.GzipFile (mode = mode_read, fileobj = in_buffer) kā fails:
read_data = fails.lasīt (len (non_compressed))
print ('\ nLasot vēlreiz:', len (read_data))
izdrukāt (lasīt_datus)

Apskatīsim šīs komandas izvadi:

Gzip faila lasīšana straumē

Lai gan programma bija nedaudz gara, mēs faktiski vienkārši izmantojām Python moduļus, lai atvērtu failu un straumētu saturu uz konsoli ar buferētu lasītāja objektu.

Secinājums

Šajā nodarbībā mēs apskatījām, kā mēs varam izmantot Python gzip moduli, lai saspiestu un atspiestu failus Python. Lielākā iezīme, ko šī bibliotēka mums piedāvā, ir tā, ka saspiestos failus varam apstrādāt kā parastus failu objektus.

Lasiet vairāk uz Python balstītas ziņas šeit.

10 labākās spēles, kuras spēlēt Ubuntu
Windows platforma ir bijusi viena no dominējošajām spēļu platformām, jo ​​mūsdienās tiek attīstīts milzīgs spēļu skaits, lai atbalstītu Windows. Vai k...
5 labākās arkādes spēles Linux
Mūsdienās datori ir nopietnas mašīnas, kuras izmanto spēlēšanai. Ja jūs nevarat iegūt jauno augsto rezultātu, jūs zināt, ko es domāju. Šajā ierakstā j...
Cīņa par Vesnotu 1.13.6 Izlaista attīstība
Cīņa par Vesnotu 1.13.6 izlaists pagājušajā mēnesī, ir sestais izstrādes izlaidums 1.13.x sērija un tā nodrošina vairākus uzlabojumus, īpaši lietotāja...