gzip – Tuki gzip-tiedostoille¶
On 24 marraskuun, 2021 by adminLähdekoodi: Lib/gzip.py
Tämä moduuli tarjoaa yksinkertaisen käyttöliittymän tiedostojen pakkaamiseen ja purkamiseen aivan kuten GNU-ohjelmat gzip ja gunzip tekisivät.
Datan pakkaamisesta huolehtii zlib
-moduuli.
Moduuli gzip
tarjoaa GzipFile
-luokan sekä open()
-, compress()
– ja decompress()
– mukavuusfunktiot.GzipFile
-luokka lukee ja kirjoittaa gzip-muotoisia tiedostoja,pakkaa tai purkaa tiedot automaattisesti niin, että ne näyttävät tavalliselta tiedosto-objektilta.
Huomaa, että tämä moduuli ei tue muita tiedostomuotoja, joita gzip- ja gunzip-ohjelmat voivat purkaa, kuten esimerkiksi Compress- ja Pack-ohjelmilla tuotettuja tiedostoja.
Moduuli määrittelee seuraavat kohteet:
gzip.
open
(filename, mode=’rb’, compresslevel=9, encoding=None, errors=None, newline=None)¶
Avaa gzip-pakatun tiedoston binääri- tai tekstitilassa palauttaen tiedosto-objektin.
The filename-argumentti voi olla todellinen tiedostonimi (str
tai bytes
-olio) tai olemassa oleva tiedosto-olio, josta luetaan tai johon kirjoitetaan.
Tila-argumentti voi olla mikä tahansa seuraavista: 'r'
, 'rb'
, 'a'
, 'ab'
,'w'
, 'wb'
, 'x'
tai 'xb'
binääritilassa tai 'rt'
,'at'
, 'wt'
tai 'xt'
tekstitilassa. Oletusarvo on 'rb'
.
The compresslevel-argumentti on kokonaisluku välillä 0-9, kutenGzipFile
-konstruktorissa.
Binääritilassa tämä funktio vastaa GzipFile
konstruktoria: GzipFile(filename, mode, compresslevel)
. Tällöin koodaus-, virhe- ja rivinvaihto-argumentteja ei tarvitse antaa.
Tekstitilassa luodaan GzipFile
-olio, joka kääritäänio.TextIOWrapper
-instanssiin määritetyllä koodauksella, virheenkäsittelykäyttäytymisellä ja rivinpääte(i)llä.
Muutettu versiossa 3.3: Lisätty tuki sille, että tiedostonimi on tiedosto-objekti, tuki tekstitilalle,sekä koodaus-, virheenkäsittely- ja rivinvaihtoargumentit.
Muutettu versiossa 3.4: Lisätty tuki tiloille 'x'
, 'xb'
ja 'xt'
.
Muutettu versiossa 3.6: Hyväksyy polun kaltaisen objektin.
poikkeusgzip.
BadGzipFile
¶
Poikkeus, joka nostetaan virheellisistä gzip-tiedostoista. Se perii OSError
:n. EOFError
ja zlib.error
voidaan myös herättää virheellisistä gzip-tiedostoista.
Uusi versiossa 3.8.
luokkagzip.
GzipFile
(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Konstruktori GzipFile
-luokalle, joka simuloi useimpia tiedosto-objektin metodeja lukuun ottamatta truncate()
metodia. Ainakin yhdelle fileobj:stä ja filename:sta on annettava muu kuin triviaaliarvo.
Uuden luokan instanssin perustana on fileobj, joka voi olla tavallinen tiedosto, io.BytesIO
-olio tai mikä tahansa muu tiedostoa simuloiva olio. Sen oletusarvo on None
, jolloin filename avataan fileobjektin antamiseksi.
Jos fileobj ei ole None
, filename-argumenttia käytetään vain beincluded in the gzip file header, joka voi sisältää pakkaamattoman tiedoston alkuperäisenfilenamen. Se on oletusarvoisesti fileobj:n tiedostonimi, jos se on erotettavissa; muussa tapauksessa se on oletusarvoisesti tyhjä merkkijono, ja tällöin alkuperäistä tiedostonimeä ei sisällytetä otsikkoon.
Tila-argumentti voi olla mikä tahansa seuraavista: 'r'
, 'rb'
, 'a'
, 'ab'
, 'w'
,'wb'
, 'x'
tai 'xb'
riippuen siitä, luetaanko vai kirjoitetaanko tiedosto. Oletusarvo on fileobj:n tila, jos se on havaittavissa; muussa tapauksessa oletusarvo on 'rb'
. Tulevissa Python-julkaisuissa fileobj:n tilaa ei käytetä. Kirjoittamista varten on parempi aina määrittää mode.
Huomaa, että tiedosto avataan aina binääritilassa. Jos haluat avata pakatun tiedoston tekstitilassa, käytä open()
(tai kiedo GzipFile
:siio.TextIOWrapper
:llä).
The compresslevel-argumentti on kokonaisluku väliltä 0
– 9
, joka säätelee pakkauksen tasoa; 1
on nopein ja tuottaa vähiten pakkausta, ja 9
on hitain ja tuottaa eniten pakkausta. 0
ei sisällä pakkausta. Oletusarvo on 9
.
Mtime-argumentti on valinnainen numeerinen aikaleima, joka kirjoitetaan virran viimeisimmän muutoksen aikakenttään pakkauksen yhteydessä. Se tulisi antaa vain pakkaustilassa. Jos se jätetään pois tai jos se on None
, käytetään nykyistä aikaa. Katso lisätietoja mtime
-attribuutista.
Objektin GzipFile
-metodin close()
kutsuminen ei sulje fileobj:tä, koska voit haluta liittää lisää materiaalia pakattujen tietojen jälkeen. Näin voit myös luovuttaa kirjoitusta varten avatun io.BytesIO
-olion fileobj:ksi ja hakea tuloksena syntyneen muistipuskurin io.BytesIO
-olion getvalue()
-metodilla.
GzipFile
tukee io.BufferedIOBase
-rajapintaa,mukaan lukien iteraatio ja with
-lause. Ainoastaantruncate()
-metodia ei ole toteutettu.
GzipFile
tarjoaa myös seuraavan metodin ja attribuutin:
peek
(n)¶
Lue n pakkaamatonta tavua etenemättä tiedostoasentoa.Korkeintaan yksi yksittäinen lukukerta pakatulle virralle tehdään kutsun täyttämiseksi. Palautettujen tavujen määrä voi olla enemmän tai vähemmän kuin pyydetty.
Huomautus
Kutsu peek()
ei muuta GzipFile
-tiedoston sijaintia, mutta se voi muuttaa taustalla olevan tiedosto-objektin sijaintia (esim. jos GzipFile
on muodostettufileobj-parametrilla).
Uusi versiossa 3.2.
mtime
¶
Pakkauksen purkamisen yhteydessä viimeksi luetun otsikon viimeisimmän muutosajankohdan kentän arvo voidaan lukea tästä attribuutista kokonaislukuna. Alkuarvo ennen otsikoiden lukemista on None
.
Kaikkien gzip-pakattujen virtojen on sisällettävä aikaleimakenttä. Jotkin ohjelmat, kuten gunzip, käyttävät aikaleimaa. Muoto on sama kuin time.time()
:n paluuarvo ja st_mtime
-attribuutti os.stat()
:n palauttamasta objektista.
Muutettu versiossa 3.1: Lisättiin tuki with
-lausekkeelle, konstruktoriargumentille themtime ja mtime
-attribuutille.
Muutettu versiossa 3.2: Lisättiin tuki nollatäytteisille ja etsimättömille tiedostoille.
Muutettu versiossa 3.3: io.BufferedIOBase.read1()
-metodi on nyt toteutettu.
Muutettu versiossa 3.4: Lisätty tuki 'x'
– ja 'xb'
-tiloille.
Muutettu versiossa 3.5: Lisätty tuki arbitrarybytes-tyyppisten objektien kirjoittamiselle.read()
-metodi hyväksyy nyt argumentin None
.
Muutettu versiossa 3.6: Hyväksyy polun kaltaisen objektin.
Vähennetty versiosta 3.9 lähtien: GzipFile
:n avaaminen kirjoittamista varten ilman modeargumentin määrittelyä on vanhentunut.
gzip.
compress
(data, compresslevel=9, *, mtime=None)¶
Pakkaa data palauttaen pakatun datan sisältävän bytes
objektin. compresslevelillä ja mtime:llä on sama merkitys kuin edellä GzipFile
konstruktorissa.
Uusi versiossa 3.2.
Muutettu versiossa 3.8: Lisätty mtime-parametri toistettavaa tulostusta varten.
gzip.
decompress
(data)¶
Purkaa data ja palauttaa bytes
-olion, joka sisältää pakkaamattoman datan.
Uutta versiossa 3.2.
Käyttöesimerkkejä¶
Esimerkki pakatun tiedoston lukemisesta:
import gzipwith gzip.open('/home/joe/file.txt.gz', 'rb') as f: file_content = f.read()
Esimerkki pakatun GZIP-tiedoston luomisesta:
import gzipcontent = b"Lots of content here"with gzip.open('/home/joe/file.txt.gz', 'wb') as f: f.write(content)
Esimerkki jo olemassaolevan tiedoston pakkaamisesta GZIP-pakkauksella:
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)
Esimerkki siitä, miten GZIP-pakkaat binäärijonon:
import gzips_in = b"Lots of content here"s_out = gzip.compress(s_in)
Katso myös
Moduuli zlib
Datanpakkauksen perusmoduuli, jota tarvitaan gzip-tiedostomuodon tukemiseen.
Komentorivikäyttöliittymä¶
Moduuli gzip
tarjoaa yksinkertaisen komentorivikäyttöliittymän tiedostojen pakkaamiseen tai pakkaamiseen.
Moduuli gzip
säilyttää syötetiedosto(t) suoritettuaan.
Muutettu versioon 3.8: Lisätty uusi komentorivikäyttöliittymä, jossa on käyttö.oletusarvoisesti CLI:tä suoritettaessa oletuspakkaustaso on 6.
Komentorivin asetukset¶
file
¶
Jos tiedostoa ei ole määritetty, luetaan sys.stdin
:stä.
--fast
¶
Merkitse nopeinta pakkausmenetelmää (vähemmän pakkausta).
--best
¶
Merkitsee hitaimman pakkausmenetelmän (paras pakkaus).
-d
,
--decompress
¶
Pakkaa annettu tiedosto pois.
-h
,
--help
¶
Näyttää ohjeviestin.
Vastaa