gzip – A gzip fájlok támogatása¶
On november 24, 2021 by adminSource code: Lib/gzip.py
Ez a modul egy egyszerű felületet biztosít a fájlok tömörítéséhez és kicsomagolásához, ahogyan azt a GNU gzip és gunzip programok tennék.
Az adattömörítést a zlib
modul biztosítja.
A gzip
modul biztosítja a GzipFile
osztályt, valamint aopen()
, compress()
és decompress()
kényelmi függvényeket.Az GzipFile
osztály gzip formátumú fájlokat olvas és ír,automatikusan tömöríti vagy dekompresszálja az adatokat, hogy azok úgy nézzenek ki, mint egy közönséges fájlobjektum.
Megjegyezzük, hogy a gzip és gunzip programok által dekompresszálható további fájlformátumokat, például acompress és pack által előállítottakat ez a modul nem támogatja.
A modul a következő elemeket definiálja:
gzip.
open
(filename, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
A gzip tömörített fájl megnyitása bináris vagy szöveges módban, egy fileobjektum visszaadásával.
A filename argumentum lehet egy tényleges fájlnév (egy str
vagybytes
objektum), vagy egy létező fájlobjektum, amelyből olvasni vagy amelybe írni szeretnénk.
A mode argumentum lehet 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
vagy 'xb'
bináris mód esetén, vagy 'rt'
,'at'
, 'wt'
vagy 'xt'
szöveges mód esetén. Az alapértelmezett érték 'rb'
.
A compresslevel argumentum egy 0 és 9 közötti egész szám, mint aGzipFile
konstruktor esetében.
Bináris módban ez a függvény megegyezik a GzipFile
konstruktorral: GzipFile(filename, mode, compresslevel)
. Ebben az esetben a kódolás, a hibák és az újsor argumentumokat nem kell megadni.
Szöveges mód esetén egy GzipFile
objektumot hoz létre, és egyio.TextIOWrapper
példányba csomagolja a megadott kódolással, hibakezelési viselkedéssel és sorvégződés(ek)kel.
Változott a 3.3-as verzióban: Hozzáadva a fájlnév fájlobjektumként való támogatását, a szöveges mód támogatását,valamint a kódolás, a hibák és az újsor argumentumokat.
Változott a 3.4-es verzióban: Hozzáadva a 'x'
, 'xb'
és 'xt'
módok támogatása.
Változott a 3.6-os verzióban: Elfogad egy útvonal-szerű objektumot.
kivételgzip.
BadGzipFile
¶
Az érvénytelen gzip-fájlok esetén felvetett kivétel. Örökölte a OSError
-t. EOFError
és zlib.error
érvénytelen gzipfájlok esetén is felvethető.
Új a 3.8-as verzióban.
classgzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Konstruktor a GzipFile
osztályhoz, amely a file objektum legtöbb metódusát szimulálja, a truncate()
metódus kivételével. A fileobj és a filename közül legalább az egyiknek nem triviális értéket kell adni.
Az új osztálypéldány alapja a fileobj, amely lehet egy hagyományos fájl, egyio.BytesIO
objektum vagy bármilyen más, fájlt szimuláló objektum. Alapértelmezés szerint None
, ebben az esetben a filename megnyílik, hogy egy fileobjet adjon meg.
Ha a fileobj nem None
, a filename argumentum csak arra szolgál, hogy bekerüljön a gzip fájl fejlécébe, amely tartalmazhatja a tömörítetlen fájl eredetifilenevét. Alapértelmezés szerint a fileobj fájlneve, ha megkülönböztethető; máskülönben üres karakterlánc, és ebben az esetben az eredeti fájlnév nem szerepel a fejlécben.
A mode argumentum lehet 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
vagy 'xb'
, attól függően, hogy a fájl olvasása vagy írása történik. Az alapértelmezett a fileobj üzemmódja, ha felismerhető; egyébként az alapértelmezett 'rb'
. A Python jövőbeli kiadásaiban a fileobj módját nem fogjuk használni. Jobb, ha mindig megadjuk a módot az íráshoz.
Megjegyezzük, hogy a fájl mindig bináris módban nyílik meg. Ha tömörített fájlt szöveges módban szeretnénk megnyitni, használjuk a open()
-t (vagy csomagoljuk a GzipFile
-t egyio.TextIOWrapper
-val).
A compresslevel argumentum egy 0
és 9
közötti egész szám, amely a tömörítés szintjét szabályozza; 1
a leggyorsabb és a legkisebb tömörítést eredményezi, 9
pedig a leglassabb és a legnagyobb tömörítést. A 0
nem jelent tömörítést. Az alapértelmezett érték 9
.
A mtime argumentum egy opcionális numerikus időbélyeg, amelyet tömörítéskor a folyam utolsó módosítási idő mezőjébe kell írni. Csak tömörítési módban kell megadni. Ha elhagyja vagy None
, akkor az aktuális időt használja a rendszer. További részletekért lásd a mtime
attribútumot.
A GzipFile
objektum close()
metódusának meghívása nem zárja le a fileobj-t, mivel előfordulhat, hogy a tömörített adatok után további anyagot szeretne csatolni. Ez azt is lehetővé teszi, hogy átadjunk egy írásra megnyitott io.BytesIO
objektumot fileobj-ként, és az így kapott memóriapuffert a io.BytesIO
objektum getvalue()
metódusával hívjuk le.
GzipFile
támogatja a io.BufferedIOBase
interfészt,beleértve az iterációt és a with
utasítást. Csak atruncate()
metódus nincs implementálva.
GzipFile
a következő metódust és attribútumot is biztosítja:
peek
(n)¶
N tömörítetlen bájtok olvasása a fájl pozíciójának előretolása nélkül.A hívás teljesítéséhez legfeljebb egyetlen olvasás történik a tömörített folyamra. A visszakapott bájtok száma lehet több vagy kevesebb, mint a kért.
Megjegyzés
Míg a peek()
hívása nem változtatja meg a GzipFile
fájlpozícióját, megváltoztathatja a mögöttes fájlobjektum pozícióját (pl. ha a GzipFile
afileobj paraméterrel lett létrehozva).
Újdonság a 3.2. verzióban.
mtime
¶
A dekompresszió során a legutoljára olvasott fejlécben lévő utolsó módosítási idő mező értéke kiolvasható ebből az attribútumból, mint egész szám. A kezdeti érték a fejlécek beolvasása előtt None
.
Minden gzip tömörített adatfolyamnak tartalmaznia kell az időbélyeg mezőt. Néhány program, például a gunzip, használja az időbélyeget. A formátum megegyezik atime.time()
visszatérési értékével és a os.stat()
által visszaadott objektum st_mtime
attribútumával.
Változott a 3.1-es verzióban: A with
utasítás támogatása, valamint a time konstruktor argumentum és a mtime
attribútum hozzáadása.
Változott a 3.2. verzióban: A nullával kitöltött és nem kereshető fájlok támogatása hozzáadásra került.
Változott a 3.3. verzióban: A io.BufferedIOBase.read1()
módszer implementálva lett.
Változott a 3.4. verzióban:
Változott a 3.5. verzióban: Támogatással bővült az arbitrarybytes-szerű objektumok írása.A read()
módszer mostantól elfogadja aNone
argumentumot.
Változott a 3.6. verzióban: Elfogad egy path-szerű objektumot.
Deprecated since version 3.9: A modeargumentum megadása nélküli GzipFile
íráshoz történő megnyitása deprecated.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Tömöríti az adatokat, visszaad egy bytes
objektumot, amely tartalmazza a tömörített adatokat. A compresslevel és mtime jelentése ugyanaz, mint a fenti GzipFile
konstruktorban.
Új a 3.2. verzióban.
Változott a 3.8. verzióban:
gzip.
decompress
(data)¶
Az adatok kicsomagolása, a kicsomagolatlan adatokat tartalmazó bytes
objektum visszaadása.
Új a 3.2-es verzióban.
Használati példák¶
Példa egy tömörített fájl olvasására:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Példa egy tömörített GZIP fájl létrehozására:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Példa egy meglévő fájl GZIP tömörítésére:
import gzipimport shutilwith open('/home/joe/file.txt', 'rb') as f_in: with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out: shutil.copyfileobj(f_in, f_out)
Példa arra, hogyan kell egy bináris karakterláncot GZIP-tömöríteni:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Lásd még
Modul zlib
A gzip fájlformátum támogatásához szükséges alapvető adattömörítő modul.
Kommandósori felület¶
A gzip
modul egyszerű parancssori felületet biztosít a fájlok tömörítéséhez vagy tömörítéséhez.
A gzip
modul a végrehajtás után megtartja a bemeneti fájl(ok)at.
Változott a 3.8-as verzióban: Új parancssori felület hozzáadása a használattal.Alapértelmezés szerint a CLI végrehajtásakor az alapértelmezett tömörítési szint 6.
Parancsnoki beállítások¶
file
¶
Ha nincs megadva fájl, a sys.stdin
-ből olvas.
--fast
¶
A leggyorsabb tömörítési módot jelzi (kevesebb tömörítés).
--best
¶
A leglassabb tömörítési módszert jelzi (legjobb tömörítés).
-d
,
--decompress
¶
A megadott fájl tömörítése.
-h
,
--help
¶
Súgóüzenet megjelenítése.
.
Vélemény, hozzászólás?