gzip
— Υποστήριξη για αρχεία gzip¶
Πηγαίος κώδικας: Lib/gzip.py
Αυτό το module παρέχει μια απλή διεπαφή για τη συμπίεση και αποσυμπίεση αρχείων όπως ακριβώς θα έκαναν τα προγράμματα της GNU gzip και gunzip.
Η συμπίεση δεδομένων παρέχεται από το zlib
module.
Το gzip
module παρέχει την κλάση GzipFile
, καθώς και τις συναρτήσεις διευκόλυνσης open()
, compress()
και decompress()
. Η κλάση GzipFile
διαβάζει και γράφει αρχεία μορφής gzip, συμπιέζοντας ή αποσυμπιέζοντας αυτόματα τα δεδομένα, ώστε να φαίνεται σαν ένα συνηθισμένο file object.
Σημειώστε ότι πρόσθετες μορφές αρχείων που μπορούν να αποσυμπιεστούν από τα προγράμματα gzip και gunzip, όπως αυτές που παράγονται από τα compress και pack, δεν υποστηρίζονται από αυτό το module.
Το module ορίζει τα ακόλουθα στοιχεία:
- gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)¶
Ανοίγει ένα gzip-συμπιεσμένο αρχείο σε δυαδική ή σε λειτουργία κειμένου, επιστρέφοντας ένα file object.
Η παράμετρος filename μπορεί να είναι ένα πραγματικό όνομα αρχείου (ένα αντικείμενο
str
ήbytes
), ή ένα υπάρχον αντικείμενο αρχείου για ανάγνωση και εγγραφή.Η παράμετρος mode μπορεί να είναι οποιαδήποτε από τις
'r'
.'rb'
,'a'
,'ab'
,'w'
,'wb'
,'x'
ή'xb'
για δυαδική λειτουργία, ή'rt'
,'at'
,'wt'
ή'xt'
για λειτουργία κειμένου. Η προεπιλογή είναι το'rb'
.Η παράμετρος compresslevel είναι ένας ακέραιος από 0 έως 9, όπως και για τον constructor της κλάσης
GzipFile
.Για δυαδική λειτουργία, αυτή η συνάρτηση είναι ισοδύναμη με τον constructor της κλάσης
GzipFile
:GzipFile(filename, mode, compresslevel)
. Σε αυτή την περίπτωση, οι παράμετροι encoding, errors και newline δεν πρέπει να παρέχονται.Για τη λειτουργία κειμένου, δημιουργείται ένα αντικείμενο
GzipFile
και γίνεται wrap σε ένα στιγμιότυπο της κλάσηςio.TextIOWrapper
με την καθορισμένη κωδικοποίηση, τη συμπεριφορά διαχείρισης σφαλμάτων και το(α) τέλος(η) γραμμής.Άλλαξε στην έκδοση 3.3: Προστέθηκε υποστήριξη για την παράμετρο filename ως αντικείμενο αρχείου, υποστήριξη για τη λειτουργία κειμένου, καθώς και οι παράμετροι encoding, errors και newline.
Άλλαξε στην έκδοση 3.4: Προστέθηκε υποστήριξη για τις λειτουργίες
'x'
,'xb'
και'xt'
.Άλλαξε στην έκδοση 3.6: Δέχεται ένα path-like object.
- exception gzip.BadGzipFile¶
Μια εξαίρεση γίνεται raise για μη έγκυρα αρχεία gzip. Κληρονομεί από την
OSError
. Οι εξαιρέσειςEOFError
καιzlib.error
μπορούν επίσης να γίνουν raise για μη έγκυρα αρχεία gzip.Added in version 3.8.
- class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶
Ο constructor της κλάσης
GzipFile
, η οποία προσομοιώνει τις περισσότερες μεθόδους ενός file object, με εξαίρεση τη μέθοδοtruncate()
. Τουλάχιστον μια από τις παραμέτρους fileobj και filename πρέπει να έχει μια μη τετριμμένη τιμή.Το νέο στιγμιότυπο της κλάσης βασίζεται στο fileobj, το οποίο μπορεί να είναι ένα κανονικό αρχείο, ένα αντικείμενο
io.BytesIO
, ή οποιοδήποτε άλλο αντικείμενο που προσομοιώνει αρχείο. Η προεπιλογή είναιNone
, οπότε στην περίπτωση αυτή το filename ανοίγεται για να παρέχει ένα αντικείμενο αρχείου.Όταν το fileobj δεν είναι
None
, η παράμετρος filename χρησιμοποιείται μόνο για να συμπεριληφθεί στην επικεφαλίδα του αρχείου gzip, η οποία μπορεί να περιέχει το αρχικό όνομα του μη συμπιεσμένου αρχείου. Η προεπιλογή είναι το όνομα αρχείου του fileobj, αν αυτό μπορεί να προσδιοριστεί· διαφορετικά, η προεπιλογή είναι η κενή συμβολοσειρά, και σε αυτή την περίπτωση το αρχικό όνομα αρχείου δεν περιλαμβάνεται στην επικεφαλίδα.Η παράμετρος mode μπορεί να είναι οποιαδήποτε από τις
'r'
,'rb'
,'a'
,'ab'
,'w'
,'wb'
,'x'
ή'xb'
, ανάλογα με το αν το αρχείο θα διαβαστεί ή θα γραφτεί. Η προεπιλογή είναι η λειτουργία του fileobj, αν αυτό μπορεί να προσδιοριστεί· διαφορετικά, η προεπιλογή είναι'rb'
. Σε μελλοντικές εκδόσεις της Python, η λειτουργία του fileobj δεν θα χρησιμοποιείται. Είναι καλύτερο να καθορίζεται πάντα η παράμετρος mode κατά την εγγραφή.Σημειώστε ότι το αρχείο ανοίγει πάντα σε δυαδική λειτουργία. Για να ανοίξετε ένα συμπιεσμένο αρχείο σε λειτουργία κειμένου, χρησιμοποιήστε τη συνάρτηση
open()
(ή κάντε wrap τοGzipFile
με έναio.TextIOWrapper
).Η παράμετρος compresslevel είναι ένας ακέραιος από
0
έως9
που ελέγχει το επίπεδο συμπίεσης· το1
είναι το ταχύτερο και παράγει τη μικρότερη συμπίεση, ενώ το9
είναι το πιο αργό και παράγει τη μεγαλύτερη συμπίεση. Το0
σημαίνει καθόλου συμπίεση. Η προεπιλογή είναι το9
.Το προαιρετικό όρισμα mtime είναι η χρονική σήμανση που ζητείται από το gzip. Η ώρα είναι σε μορφή Unix, δηλαδή δευτερόλεπτα από τις 00:00:00 UTC, 1η Ιανουαρίου 1970. Εάν παραληφθεί το mtime ή
None
, χρησιμοποιείται η τρέχουσα ώρα. Χρησιμοποιήστε mtime = 0 για να δημιουργήσετε μια συμπιεσμένη ροή που δεν εξαρτάται από το χρόνο δημιουργίας.Δείτε παρακάτω για το χαρακτηριστικό
mtime
που ορίζεται κατά την αποσυμπίεση.Η κλήση της μεθόδου
close()
ενός αντικειμένουGzipFile
δεν κλείνει το fileobj, καθώς μπορεί να θέλετε να προσθέσετε επιπλέον δεδομένα μετά τη συμπιεσμένη πληροφορία. Αυτό επιτρέπει επίσης να περάσετε ένα αντικείμενοio.BytesIO
ανοιγμένο για εγγραφή ως fileobj και να ανακτήσετε τον τελικό buffer μνήμης χρησιμοποιώντας τη μέθοδοgetvalue()
του αντικειμένουio.BytesIO
.Η κλάση
GzipFile
υποστηρίζει τη διεπαφήio.BufferedIOBase
, συμπεριλαμβανομένης της δυνατότητας επανάληψης και της χρήσης με τη δήλωσηwith
. Μόνο η μέθοδοςtruncate()
δεν είναι υλοποιημένη.Η
GzipFile
παρέχει επίσης την ακόλουθη μέθοδο και ιδιότητα:- peek(n)¶
Διαβάζει n μη συμπιεσμένα bytes χωρίς να μετακινεί τη θέση του αρχείου. Ο αριθμός των bytes που επιστρέφονται μπορεί να είναι περισσότερα ή λιγότερα από τα ζητούμενα.
Σημείωση
Αν και η κλήση της μεθόδου
peek()
δεν αλλάζει τη θέση του αρχείου του αντικειμένουGzipFile
, μπορεί να αλλάξει τη θέση του υποκείμενου αντικειμένου αρχείου (π.χ. αν τοGzipFile
δημιουργήθηκε με την παράμετρο fileobj).Added in version 3.2.
- mode¶
'rb'
για ανάγνωση και'wb'
για εγγραφή.Άλλαξε στην έκδοση 3.13: Σε προηγούμενες εκδόσεις αυτό ήταν ένα ακέραιος
1
ή2
.
- mtime¶
Κατά την αποσυμπίεση, αυτό το χαρακτηριστικό ορίζεται στην τελευταία σήμανση στην πιο πρόσφατα αναγνωσμένη κεφαλίδα. Είναι ένας ακέραιος αριθμός, που κρατά τον αριθμό των δευτερολέπτων από την εποχή του Unix (00:00:00 UTC, 1 Ιανουαρίου, 1970). Η αρχική τιμή πριν από την ανάγνωση οποιωνδήποτε κεφαλίδων είναι
None
.
- name¶
Η διαδρομή προς το αρχείο gzip στο δίσκο, ως
str
ήbytes
. Ισοδυναμεί με την έξοδο της συνάρτησηςos.fspath()
για την αρχική διαδρομή εισόδου, χωρίς καμία άλλη κανονικοποίηση, επίλυση ή επέκταση.
Άλλαξε στην έκδοση 3.1: Προστέθηκε η υποστήριξη για τη δήλωση
with
, μαζί με την παράμετρο mtime στον κατασκευαστή και την ιδιότηταmtime
.Άλλαξε στην έκδοση 3.2: Προστέθηκε υποστήριξη για αρχεία με μηδενική συμπλήρωση και μη αναζητήσιμα αρχεία.
Άλλαξε στην έκδοση 3.3: Η μέθοδος
io.BufferedIOBase.read1()
έχει πλέον υλοποιηθεί.Άλλαξε στην έκδοση 3.4: Προστέθηκε υποστήριξη για τις λειτουργίες
'x'
και'xb'
.Άλλαξε στην έκδοση 3.5: Προστέθηκε υποστήριξη για εγγραφή αυθαίρετων bytes-like objects. Η μέθοδος
read()
δέχεται πλέον ένα όρισμαNone
.Άλλαξε στην έκδοση 3.6: Δέχεται ένα path-like object.
Αποσύρθηκε στην έκδοση 3.9: Το άνοιγμα ενός
GzipFile
για εγγραφή χωρίς να καθοριστεί η παράμετρος mode έχει καταργηθεί.Άλλαξε στην έκδοση 3.12: Καταργήθηκε το χαρακτηριστικό
filename
, χρησιμοποιήστε το χαρακτηριστικόname
αντ” αυτού.
- gzip.compress(data, compresslevel=9, *, mtime=None)¶
Συμπιέζει τα data και επιστρέφει ένα αντικείμενο
bytes
που περιέχει τα συμπιεσμένα δεδομένα. Οι παράμετροι compresslevel και mtime έχουν την ίδια σημασία όπως στον κατασκευαστή της κλάσηςGzipFile
.Added in version 3.2.
Άλλαξε στην έκδοση 3.8: Προστέθηκε η παράμετρος mtime για αναπαραγώγιμη έξοδο.
Άλλαξε στην έκδοση 3.11: Η ταχύτητα βελτιώνεται με τη συμπίεση όλων των δεδομένων ταυτόχρονα αντί για ροή. Κλήσεις με mtime ρυθμισμένο σε
0
ανακατευθύνονται στη συνάρτησηzlib.compress()
για καλύτερη απόδοση. Σε αυτή την περίπτωση, η έξοδος μπορεί να περιέχει μια τιμή byte «OS» στην κεφαλίδα gzip διαφορετική από 255 «unknown», όπως καθορίζεται από την υποκείμενη υλοποίηση της zlib.Άλλαξε στην έκδοση 3.13: Το byte του λειτουργικού συστήματος κεφαλίδα gzip είναι εγγυημένο ότι θα ρυθμιστεί στο 255 όταν χρησιμοποιείται αυτή η συνάρτηση, όπως συνέβαινε στην έκδοση 3.10 και παλαιότερα.
- gzip.decompress(data)¶
Αποσυμπιέζει τα data και επιστρέφει ένα αντικείμενο
bytes
που περιέχει τα αποσυμπιεσμένα δεδομένα. Αυτή η συνάρτηση μπορεί να αποσυμπιέσει δεδομένα gzip πολλαπλών μελών (πολλαπλά μπλοκ gzip που έχουν ενωθεί μεταξύ τους). Όταν τα δεδομένα είναι βέβαιο ότι περιέχουν μόνο ένα μέλος, η συνάρτησηzlib.decompress()
με wbits ρυθμισμένο σε 31 είναι ταχύτερη.Added in version 3.2.
Άλλαξε στην έκδοση 3.11: Η ταχύτητα βελτιώνεται αποσυμπιέζοντας τα μέλη απευθείας στην μνήμη αντί να γίνεται αποσυμπίεση σε ροή.
Παραδείγματα χρήσης¶
Παράδειγμα ανάγνωσης ενός συμπιεσμένου αρχείου:
import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:
file_content = f.read()
Παράδειγμα δημιουργίας ενός συμπιεσμένου αρχείου GZIP:
import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:
f.write(content)
Παράδειγμα συμπίεσης ενός υπάρχοντος αρχείου σε μορφή GZIP:
import gzip
import shutil
with 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)
Παράδειγμα συμπίεσης μιας δυαδικής συμβολοσειράς σε μορφή GZIP:
import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)
Δείτε επίσης
- Module
zlib
Το βασικό module συμπίεσης δεδομένων που απαιτείται για την υποστήριξη της μορφής αρχείου gzip.
Σε περίπτωση που η (από)συμπίεση gzip είναι ένα σημείο συμφόρησης, το πακέτο python-isal επιταχύνει την (από)συμπίεση με ένα ως επί το πλείστον συμβατό API.
Διεπαφή Γραμμής Εντολών¶
Το module gzip
παρέχει μια απλή διεπαφή γραμμής εντολών για τη συμπίεση ή αποσυμπίεση αρχείων.
Μόλις εκτελεστεί, το module gzip
διατηρεί το(α) αρχείο(α) εισόδου.
Άλλαξε στην έκδοση 3.8: Προστέθηκε νέα διεπαφή γραμμής εντολών με οδηγίες χρήσης. Από προεπιλογή, όταν εκτελείτε την CLI, το προεπιλεγμένο επίπεδο συμπίεσης είναι 6.
Επιλογές γραμμής εντολών¶
- --fast¶
Δηλώνει τη γρηγορότερη μέθοδο συμπίεσης (λιγότερη συμπίεση).
- --best¶
Δηλώνει την βραδύτερη μέθοδο συμπίεσης (καλύτερη συμπίεση).
- -d, --decompress¶
Αποσυμπιέζει το δοσμένο αρχείο.
- -h, --help¶
Εμφανίζει το μήνυμα βοήθειας.