Ebben a leckében megvizsgáljuk, hogyan használhatjuk a Python-t gzip modul a Python tömörített fájljainak olvasásához és írásához. A modul által nyújtott legnagyobb tulajdonság az, hogy a tömörített fájlokat normál fájlobjektumként kezelhetjük, ami megkímél bennünket a fájlok kezelésének összetettségétől és a kódunk életciklusától, és lehetővé teszi számunkra, hogy a program alapvető üzleti logikájára összpontosítsunk.A gzip modul szinte ugyanazokat a szolgáltatásokat biztosítja számunkra, mint a GNU programok gunzip és gzip.
Tömörített fájlok írása nyitva ()
Kezdjük egy alap példával, ahol létrehozhatunk egy gzip fájlt, és írhatunk bele néhány adatot. Ehhez létre kell hoznunk egy fájlt, és írásmóddal kell megnyitnunk, hogy az adatok beilleszthetők legyenek. Nézzünk meg egy mintaprogramot, amellyel adatokat írhatunk egy gzip fájlba:
import gzipimport io
import os
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
gzip-el.nyitott (output_file, write_mode) kimenetként:
az io-val.TextIOWrapper (output, encoding = 'utf-8') kódként:
kódol.write ('Bármit beírhatunk a fájlba.\ n ')
print (output_file,
'tartalmaz', os.stat (output_file).st_size, 'bájt')
os.rendszer ('file -b --mime '.formátum (output_file))
Íme, amit ezzel a paranccsal kapunk vissza:
Írás ZIP fájlba
Ha most megnézi azt a mappastruktúrát, ahol végrehajtotta ezt a szkriptet, akkor egy új fájlnak kell lennie, amelynek neve a fenti programunkban megadott.
Több sor írása tömörített fájlba
A gzip fájlba több sort, vagy akármennyi sort is írhatunk, nagyon hasonló módon, mint az előző példában. Ahhoz, hogy ez a példa más legyen, felhasználjuk az itertools modult is. Nézzük meg a mintaprogramot:
import gzipimport io
import os
importálja az itertoolokat
output_file = 'linxhint_demo.txt.gz '
write_mode = 'wb'
gzip-el.nyitott (output_file, write_mode) kimenetként:
az io-val.TextIOWrapper (output, encoding = 'utf-8') enc-ként:
enc.írósorok (
itertoolok.repeat ('LinuxHint, ugyanazon sor megismétlése!.\ n ', 10)
)
os.rendszer ('gzcat linxhint_demo.txt.gz ')
Lássuk a parancs kimenetét:
Több sor írása
Tömörített adatok olvasása
Az utolsó példában létrehozott tömörített fájlt a gzip modul használatával is elolvashatjuk egy nagyon egyszerű hívással nyisd ki funkció:
import gzipimport io
import os
file_name = 'linxhint_demo.txt.gz '
file_mode = 'rb'
gzip-el.nyissa meg (fájlnév, fájl_mód) bemeneti fájlként:
az io-val.TextIOWrapper (input_file, kódolás = 'utf-8') dec-ként:
nyomtatás (dec.olvas())
Íme, amit ezzel a paranccsal kapunk vissza:
Gzip fájl olvasása
Patakok olvasása
Annak a ténynek köszönhetően, hogy a szöveges fájlok nagyon nagy méretűek lehetnek, okos ezeket a fájlokat streamben megnyitni, nem pedig a teljes fájlt egyetlen objektumba tölteni, ami a rendszer nagy memóriáját foglalja el, és egyes esetekben akár a folyamatot is előidézheti. hogy teljesen lezuhanjon. Nézzünk meg egy mintaprogramot, amely egy adott tömörített fájlt olvas fel egy adatfolyamban:
import gzipaz io BytesIO importálásából
import binascii
mode_write = 'wb'
mode_read = 'rb'
non_compressed = b'Megismételte a sort x alkalommal.\ n '* 8
print ('Nem tömörített adatok:', len (nem tömörített))
nyomtatás (nem tömörítve)
buf = BytesIO ()
gzip-el.GzipFile (mode = mode_write, fileobj = buf) fájlként:
fájl.ír (nem tömörített)
tömörítve = buf.getvalue ()
nyomtatás ('Tömörített adatok:', len (tömörítve))
nyomtatás (binascii.hexlify (tömörítve))
in_buffer = BytesIO (tömörítve)
gzip-el.GzipFile (mode = mode_read, fileobj = in_buffer) fájlként:
read_data = fájl.olvasni (len (nem tömörített))
print ('\ nÚjraolvasás:', len (read_data))
nyomtatás (read_data)
Lássuk a parancs kimenetét:
Gzip fájl olvasása streamben
Bár a program egy kicsit hosszú volt, valójában csak a Python modulokat használtuk, hogy megnyissuk a fájlt, és pufferolt olvasóobjektummal továbbítsuk a tartalmat a konzolra.
Következtetés
Ebben a leckében megvizsgáltuk, hogyan használhatjuk a Python gzip modult a fájlok tömörítésére és dekompresszálására a Pythonban. A könyvtár által kínált legnagyobb funkció az, hogy a tömörített fájlokat normál File objektumként kezelhetjük.
További Python alapú bejegyzéseket itt olvashat.