gzip – Suport pentru fișiere gzip¶
On noiembrie 24, 2021 by adminCod sursă: Lib/gzip.py
Acest modul oferă o interfață simplă pentru comprimarea și decomprimarea fișierelor așa cum ar face programele GNU gzip și gunzip.
Comprimarea datelor este asigurată de modulul zlib
.
Modul gzip
oferă clasa GzipFile
, precum și funcțiile de confortopen()
, compress()
și decompress()
.Clasa GzipFile
citește și scrie fișiere în format gzip,comprimând sau decomprimând automat datele astfel încât acestea să arate ca un obiect de fișier obișnuit.
Rețineți că formatele de fișiere suplimentare care pot fi decomprimate de programelegzip și gunzip, cum ar fi cele produse decompress și pack, nu sunt suportate de acest modul.
Modulul definește următoarele elemente:
gzip.
open
(filename, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
Deschide un fișier comprimat prin gzip în modul binar sau text, returnând un fișier-obiect.
Argumentul filename poate fi un nume de fișier real (un obiect str
saubytes
), sau un obiect de fișier existent din care să se citească sau în care să se scrie.
Argumentul mode poate fi oricare dintre 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
sau 'xb'
pentru modul binar, sau 'rt'
,'at'
, 'wt'
sau 'xt'
pentru modul text. Valoarea implicită este 'rb'
.
Argumentul compreslevel este un număr întreg de la 0 la 9, ca pentru constructorulGzipFile
.
Pentru modul binar, această funcție este echivalentă cu constructorul GzipFile
: GzipFile(filename, mode, compresslevel)
. În acest caz, argumentele de codificare, erori și newline nu trebuie să fie furnizate.
Pentru modul text, se creează un obiect GzipFile
și se înfășoară într-o instanțăio.TextIOWrapper
cu codificarea, comportamentul de tratare a erorilor și terminația (terminațiile) de linie specificate.
Modificat în versiunea 3.3: A fost adăugat suportul pentru ca numele de fișier să fie un obiect de fișier, suportul pentru modul text,precum și codificarea, erorile și argumentele newline.
Modificat în versiunea 3.4: S-a adăugat suport pentru modurile 'x'
, 'xb'
și 'xt'
.
Schimbat în versiunea 3.6: Acceptă un obiect de tip cale.
excepțiegzip.
BadGzipFile
¶
O excepție ridicată pentru fișiere gzip invalide. Moștenește OSError
.EOFError
și zlib.error
poate fi, de asemenea, ridicată pentru fișiere gzip invalide.
Noută în versiunea 3.8.
clasagzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Constructor pentru clasa GzipFile
, care simulează majoritatea metodelor unui obiect fișier, cu excepția metodei truncate()
. Cel puțin una dintre fileobj și filename trebuie să primească o valoare non-trivială.
Noua instanță a clasei se bazează pe fileobj, care poate fi un fișier obișnuit, un obiectio.BytesIO
sau orice alt obiect care simulează un fișier. Valoarea implicită este None
, caz în care numele fișierului este deschis pentru a furniza un obiect fișier.
Când fileobj nu este None
, argumentul filename este folosit doar pentru a fiinclus în antetul fișierului gzip, care poate include numele original al fișierului necomprimat. Acesta are ca valoare implicită numele de fișier al fișieruluiobj, dacă este discernibil; în caz contrar, are ca valoare implicită șirul gol, iar în acest caz numele original al fișierului nu este inclus în antet.
Argumentul mode poate fi oricare dintre 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
sau 'xb'
, în funcție de faptul dacă fișierul va fi citit sau scris. Modul implicit este cel al fișieruluiobj, dacă este vizibil; în caz contrar, modul implicit este 'rb'
. În viitoarele versiuni Python nu se va mai utiliza modul fileobj. Este mai bine să specificați întotdeauna modul pentru scriere.
Rețineți că fișierul este întotdeauna deschis în modul binar. Pentru a deschide un fișier comprimatîn modul text, folosiți open()
(sau înfășurați GzipFile
cu un io.TextIOWrapper
).
Argumentul compreslevel este un număr întreg de la 0
la 9
care controlează nivelul de compresie; 1
este cel mai rapid și produce cea mai mică compresie, iar 9
este cel mai lent și produce cea mai mare compresie. 0
nu există compresie. Valoarea implicită este 9
.
Argumentul mtime este un timestamp numeric opțional care trebuie scris în câmpul ultimei ore de modificare din flux la comprimare. Acesta ar trebui să fie furnizat numai în modul de compresie. Dacă este omis sau None
, se utilizează ora curentă. A se vedea atributul mtime
pentru mai multe detalii.
Chemarea metodei close()
a unui obiect GzipFile
nu închide fișierulobj, deoarece s-ar putea să doriți să adăugați mai mult material după datele comprimate. Acest lucru vă permite, de asemenea, să treceți un obiect io.BytesIO
deschis pentru scriere ca fileobj, și să recuperați tamponul de memorie rezultat folosind metoda getvalue()
a obiectului io.BytesIO
.
GzipFile
suportă interfața io.BufferedIOBase
,inclusiv iterația și instrucțiunea with
. Numai metodatruncate()
nu este implementată.
GzipFile
oferă, de asemenea, următoarea metodă și atribut:
peek
(n)¶
Citește n octeți necomprimați fără a avansa poziția fișierului.Cel mult o singură citire pe fluxul comprimat se face pentru a satisface apelul. Numărul de octeți returnați poate fi mai mare sau mai mic decât cel solicitat.
Nota
În timp ce apelul peek()
nu modifică poziția în fișier a GzipFile
, acesta poate modifica poziția obiectului fișier subiacent (de ex. dacă GzipFile
a fost construit cu parametrulfileobj).
Noi în versiunea 3.2.
mtime
¶
La decomprimare, valoarea câmpului „last modification time” din ultimul antet citit poate fi citită din acest atribut, ca număr întreg. Valoarea inițială înainte de citirea oricărui antet este None
.
Toate fluxurile comprimate prin gzip trebuie să conțină acest câmp „timeestamp”. Unele programe, cum ar fi gunzip, fac uz de timestamp. Formatul este acelaș i ca ș i valoarea de întoarcere a luitime.time()
ș i atributul st_mtime
al obiectului returnat de os.stat()
.
Schimbat în versiunea 3.1: A fost adăugat suportul pentru instrucțiunea with
, împreună cu argumentul constructorului lortime ș i atributul mtime
.
Schimbat în versiunea 3.2: A fost adăugat suportul pentru fișierele cu umplutură zero și pentru fișierele nedetectabile.
Schimbat în versiunea 3.3: Metoda io.BufferedIOBase.read1()
este acum implementată.
Schimbat în versiunea 3.4: S-a adăugat suport pentru modurile 'x'
și 'xb'
.
Schimbat în versiunea 3.5: S-a adăugat suport pentru scrierea obiectelor de tip byte arbitrar.Metoda read()
acceptă acum un argument deNone
.
Schimbat în versiunea 3.6: Acceptă un obiect de tip path.
Deprecizat din versiunea 3.9: Deschiderea GzipFile
pentru scriere fără a specifica argumentul mode este depreciată.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Comprimă datele, returnând un obiect bytes
care conține datele comprimate. compreslevel și mtime au aceeași semnificație ca în constructorul GzipFile
de mai sus.
Noi în versiunea 3.2.
Schimbat în versiunea 3.8: S-a adăugat parametrul mtime pentru rezultate reproductibile.
gzip.
decompress
(data)¶
Decomprimă datele, returnând un obiect bytes
care conține datele necomprimate.
Nou în versiunea 3.2.
Exemple de utilizare¶
Exemplu de citire a unui fișier comprimat:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Exemplu de creare a unui fișier comprimat GZIP:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Exemplu de comprimare GZIP a unui fișier existent:
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)
Exemplu de compresie GZIP a unui șir binar:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
A se vedea și
Modulul zlib
Modulul de compresie a datelor de bază necesar pentru a suporta formatul de fișier gzip.
Interfață de linie de comandă¶
Modul gzip
oferă o interfață simplă de linie de comandă pentru a comprima ordecomprima fișiere.
După ce este executat, modulul gzip
păstrează fișierul (fișierele) de intrare.
Schimbat în versiunea 3.8: Se adaugă o nouă interfață de linie de comandă cu o utilizare. în mod implicit, atunci când veți executa CLI, nivelul de compresie implicit este 6.
Opțiuni de linie de comandă¶
file
¶
Dacă fișierul nu este specificat, se citește din sys.stdin
.
--fast
¶
Indică cea mai rapidă metodă de compresie (mai puțină compresie).
--best
¶
Indică cea mai lentă metodă de compresie (cea mai bună compresie).
-d
,
--decompress
¶
Decomprimă fișierul dat.
-h
,
--help
¶
Afișează mesajul de ajutor.
.
Lasă un răspuns