Š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 gzipimportuoti 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 gzipimportuoti 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 gzipimportas 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 gzipiš 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.