„Python“

„Python“ gzip modulis

„Python“ gzip modulis

Šioje pamokoje mes panagrinėsime, kaip galime naudotis „Python“ gzip modulis skaityti ir rašyti į suglaudintus failus „Python“. Didžiausia šio modulio galimybė mums yra ta, kad suglaudintus failus galime traktuoti kaip įprastus failų objektus, o tai taupo mus nuo failų tvarkymo ir jų gyvavimo ciklo sudėtingumo mūsų kode ir leidžia mums sutelkti dėmesį į pagrindinę programos verslo logiką.The gzip modulis suteikia mums beveik tas pačias funkcijas kaip ir GNU programos pistoletas ir gzip.

Suspaustų failų rašymas atidarius ()

Pradėsime nuo pagrindinio pavyzdžio, kur galime sukurti gzip failą ir įrašyti į jį keletą duomenų. Tam turime sukurti failą ir atidaryti jį rašymo režimu, kad į jį būtų galima įterpti duomenis. Pažvelkime į pavyzdinę programą, kuria galime įrašyti duomenis į gzip failą:

importuoti gzip
importuoti io
importuoti os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
su gzip.atidaryti (output_file, write_mode) kaip išvestį:
su io.„TextIOWrapper“ (išvestis, kodavimas = 'utf-8') kaip kodavimas:
koduoti.rašyti ('Į failą galime įrašyti viską, ko norime.\ n ')
spausdinti (output_file,
„yra“, os.stat (output_file).st_size, „baitai“)
os.sistema ('file -b --mime '.formatas (išvesties_failas))

Štai ką mes grąžiname naudodami šią komandą:

Rašoma į ZIP failą

Jei dabar pažvelgsite į aplanko struktūrą, kurioje vykdėte šį scenarijų, turėtų būti naujas failas, pavadintas tuo, ką pateikėme aukščiau esančioje programoje.

Kelių eilučių rašymas į suglaudintą failą

Mes taip pat galime parašyti kelias eilutes arba iš tikrųjų bet kokį skaičių eilučių savo gzip faile labai panašiai, kaip tai darėme ankstesniame pavyzdyje. Kad šis pavyzdys būtų kitoks, naudosime ir itertools modulį. Pažvelkime į pavyzdinę programą:

importuoti gzip
importuoti io
importuoti os
importuoti itertoolius
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
su gzip.atidaryti (output_file, write_mode) kaip išvestį:
su io.„TextIOWrapper“ (išvestis, kodavimas = 'utf-8') kaip enc:
enc.rašytinės linijos (
itertooliai.pakartoti ('LinuxHint, kartojant tą pačią eilutę!.\ n ', 10)
)
os.sistema ('gzcat linxhint_demo.txt.gz ')

Pažiūrėkime šios komandos išvestį:

Kelių eilučių rašymas

Suspaustų duomenų skaitymas

Mes taip pat galime perskaityti suspaustą failą, kurį sukūrėme paskutiniame pavyzdyje, naudodami gzip modulį su labai paprastu skambučiu į atviras funkcija:

importuoti gzip
importas io
importuoti os
failo_vardas = 'linxhint_demo.txt.gz '
file_mode = 'rb'
su gzip.atidaryti (failo_vardas, failo_modelis) kaip įvesties_failas:
su io.„TextIOWrapper“ (įvesties_failas, kodavimas = 'utf-8') kaip dec:
spausdinti (dec.skaityti ())

Štai ką mes grąžiname naudodami šią komandą:

Gzip failo skaitymas

Srautų skaitymas

Atsižvelgiant į tai, kad teksto failai gali būti labai dideli, protinga atidaryti šiuos failus sraute, o ne įkelti visą failą į vieną objektą, kuris užima daug sistemos atminties ir kai kuriais atvejais gali sukelti procesą kad visiškai subyrėtų. Pažvelkime į programos pavyzdį, kuris sraute perskaitė pateiktą suglaudintą failą:

importuoti gzip
iš io importo „BytesIO“
importuoti binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Kartota eilutė x kartus.\ n '* 8
spausdinti ('Nesuspausti duomenys:', len (nesuspausti))
spausdinti (nesuspaustas)
buf = BytesIO ()
su gzip.„GzipFile“ (mode = mode_write, fileobj = buf) kaip failas:
failą.rašyti (nesuspaustas)
suspaustas = buf.gauti vertę ()
spausdinti ('Suspausti duomenys:', len (suglaudinti))
spausdinti (binascii.hexlify (suspaustas))
in_buffer = BytesIO (suglaudintas)
su gzip.„GzipFile“ (mode = mode_read, fileobj = in_buffer) kaip failas:
read_data = failas.skaityti (len (nesuspaustas))
spausdinti ('\ nSkaityti dar kartą:', len (read_data))
spausdinti (skaityti_duomenis)

Pažiūrėkime šios komandos išvestį:

Gzip failo skaitymas sraute

Nors programa buvo šiek tiek ilga, mes iš tikrųjų tiesiog naudojome „Python“ modulius, kad atidarytume failą ir srautą perduotume į konsolę su buferiniu skaitytuvo objektu.

Išvada

Šioje pamokoje apžvelgėme, kaip galime naudoti „Python“ gzip modulį suspausti ir išspausti failus „Python“. Didžiausia šios bibliotekos ypatybė yra ta, kad suglaudintus failus galime traktuoti kaip įprastus failų objektus.

Skaitykite daugiau „Python“ pagrįstų įrašų čia.

„HD Remastered“ žaidimai, skirti „Linux“, kurie niekada anksčiau nebuvo išleisti „Linux“
Daugelis žaidimų kūrėjų ir leidėjų siūlo senų žaidimų HD remasterį, kad prailgintų franšizės laiką. Prašome gerbėjų, prašančių suderinamumo su šiuolai...
Kaip naudoti „AutoKey“, norint automatizuoti „Linux“ žaidimus
„AutoKey“ yra darbalaukio automatizavimo įrankis, skirtas „Linux“ ir „X11“, užprogramuotas „Python 3“, „GTK“ ir „Qt“. Naudodami scenarijų ir „MACRO“ f...
Kaip parodyti FPS skaitiklį „Linux“ žaidimuose
„Linux“ žaidimai gavo didelį postūmį, kai „Valve“ paskelbė „Linux“ palaikymą „Steam“ klientui ir jų žaidimams 2012 m. Nuo tada daugelis AAA ir indie ž...