Selles tunnis uurime, kuidas saaksime Pythoni kasutada zzip moodul Pythoni pakitud failide lugemiseks ja kirjutamiseks. Suurim funktsioon, mille see moodul meile pakub, on see, et suudame tihendatud faile käsitleda tavaliste failiobjektidena, mis säästab meid failide haldamise keerukusest ja nende elutsüklist meie koodis ning võimaldab meil keskenduda programmi põhilisele äriloogikale.The zzip moodul pakub meile peaaegu samu funktsioone nagu GNU programmid püssilukk ja zzip.
Tihendatud failide kirjutamine avatud ()
Alustame põhinäite abil, kus saame luua gzip-faili ja sinna mõned andmed kirjutada. Selleks peame tegema faili ja avama selle kirjutamisrežiimis, et sinna saaks andmeid sisestada. Vaatame näidisprogrammi, mille abil saame andmeid gzip-faili kirjutada:
importige gzipimport io
impordi os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
gzip-ga.väljundina avatud (väljundfail, kirjutamisrežiim):
io-ga.TextIOWrapper (väljund, kodeerimine = 'utf-8') kodeeringuna:
kodeerida.kirjuta ('Me võime faili kirjutada kõik, mida tahame.\ n ')
print (väljund_fail,
'sisaldab', os.stat (väljundfail).st_size, 'baidid')
os.süsteem ('fail -b - mime '.formaat (väljundfail))
Selle käsuga saame tagasi:
Zip-faili kirjutamine
Kui vaatate nüüd kaustastruktuuri, kus selle skripti käivitasite, peaks olema uus fail nimega see, mida me ülal meie programmis pakkusime.
Mitme rea kirjutamine tihendatud faili
Samuti võime oma gzip-faili kirjutada mitu rida või tegelikult suvalise arvu ridu väga sarnasel viisil nagu eelmises näites. Selle näite erinevaks muutmiseks kasutame ka itertooli moodulit. Vaatame näidisprogrammi:
importige gzipimport io
impordi os
importida itertoole
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
gzip-ga.väljundina avatud (väljundfail, kirjutamisrežiim):
io-ga.TextIOWrapper (väljund, kodeerimine = 'utf-8') koodina:
enc.kirjutusliinid (
itertoolid.kordus ('LinuxHint, sama rea kordamine!.\ n ', 10)
)
os.süsteem ('gzcat linxhint_demo.txt.gz ')
Vaatame selle käsu väljundit:
Mitme rea kirjutamine
Pakitud andmete lugemine
Samuti võime viimases näites loodud tihendatud faili lugeda mooduli gzip abil, kasutades selleks väga lihtsat kõnet avatud funktsioon:
importige gzipimport io
impordi os
faili_nimi = 'linxhint_demo.txt.gz '
file_mode = 'rb'
gzip-ga.ava (faili_nimi, faili_režiim) sisendfailina:
io-ga.TextIOWrapper (sisendfail, kodeerimine = 'utf-8') dets
print (dets.loe ()
Selle käsuga saame tagasi:
Gzip-faili lugemine
Voogude lugemine
Tulenevalt asjaolust, et tekstifailid võivad olla väga suured, on mõistlik avada need failid voos, selle asemel et laadida täielik fail ühte objekti, mis võtab palju süsteemi mälu ja võib mõnel juhul isegi protsessi põhjustada täielikult kokku kukkuma. Vaatame näidisprogrammi, mis loeb antud tihendatud faili voos:
importige gzipio-st importige BytesIO
import binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Korduv rida x korda.\ n '* 8
print ('tihendamata andmed:', len (tihendamata))
print (tihendamata)
buf = BytesIO ()
gzip-ga.GzipFile (režiim = mode_write, fileobj = buf) failina:
faili.kirjuta (tihendamata)
kokkusurutud = buf.getvalue ()
print ('tihendatud andmed:', len (tihendatud))
print (binascii.hexlify (tihendatud))
in_buffer = BytesIO (tihendatud)
gzip-ga.GzipFile (mode = mode_read, fileobj = in_buffer) failina:
read_data = fail.loe (len (tihendamata))
print ('\ nUuesti lugemine:', len (read_data))
print (loe_andmeid)
Vaatame selle käsu väljundit:
Gzip-faili lugemine voos
Kuigi programm oli natuke pikk, kasutasime Pythoni mooduleid lihtsalt faili avamiseks ja sisu voogesitamiseks lugejaobjektiga konsooli.
Järeldus
Selles tunnis vaatasime, kuidas saaksime Pythoni gzip-moodulit kasutada failide tihendamiseks ja dekompressimiseks Pythonis. Suurim funktsioon, mida see kogu meile pakub, on see, et suudame tihendatud faile käsitleda tavaliste failiobjektidena.
Loe rohkem Pythoni põhiseid postitusi siit.