gzip — Support for gzip files¶
Πηγαίος κώδικας: 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¶ An exception raised for invalid gzip files. It inherits
OSError.EOFErrorandzlib.errorcan also be raised for invalid gzip files.Νέο στην έκδοση 3.8.
-
class
gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)¶ Constructor for the
GzipFileclass, which simulates most of the methods of a file object, with the exception of thetruncate()method. At least one of fileobj and filename must be given a non-trivial value.Το νέο στιγμιότυπο της κλάσης βασίζεται στο 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 είναι ένας προαιρετικός αριθμητικός χρονικός δείκτης που γράφεται στο πεδίο τελευταίας τροποποίησης στη ροή κατά τη συμπίεση. Πρέπει να παράγεται μόνο σε λειτουργία συμπίεσης. Αν παραλειφθεί ή είναι
None, χρησιμοποιείται η τρέχουσα χρονική στιγμή. Δείτε το χαρακτηριστικόmtimeγια περισσότερες λεπτομέρειες.Calling a
GzipFileobject’sclose()method does not close fileobj, since you might wish to append more material after the compressed data. This also allows you to pass anio.BytesIOobject opened for writing as fileobj, and retrieve the resulting memory buffer using theio.BytesIOobject’sgetvalue()method.GzipFilesupports theio.BufferedIOBaseinterface, including iteration and thewithstatement. Only thetruncate()method isn’t implemented.Η
GzipFileπαρέχει επίσης την ακόλουθη μέθοδο και ιδιότητα:-
peek(n)¶ Διαβάζει n μη συμπιεσμένα bytes χωρίς να μετακινεί τη θέση του αρχείου. Γίνεται το πολύ μία μόνο ανάγνωση στη συμπιεσμένη ροή για να ικανοποιηθεί η κλήση. Ο αριθμός των bytes που επιστρέφονται μπορεί να είναι περισσότερα ή λιγότερα από τα ζητούμενα.
Σημείωση
Αν και η κλήση της μεθόδου
peek()δεν αλλάζει τη θέση του αρχείου του αντικειμένουGzipFile, μπορεί να αλλάξει τη θέση του υποκείμενου αντικειμένου αρχείου (π.χ. αν τοGzipFileδημιουργήθηκε με την παράμετρο fileobj).Νέο στην έκδοση 3.2.
-
mtime¶ Κατά την αποσυμπίεση, η τιμή του πεδίου τελευταίας τροποποίησης στην πιο πρόσφατα αναγνωσμένη κεφαλίδα μπορεί να διαβαστεί από αυτή την ιδιότητα, ως ακέραιος αριθμός. Η αρχική τιμή πριν από την ανάγνωση οποιασδήποτε κεφαλίδας είναι
None.Όλες οι συμπιεσμένες ροές gzip απαιτείται να περιέχουν αυτό το πεδίο χρονικής σήμανσης. Ορισμένα προγράμματα, όπως το gunzip, χρησιμοποιούν αυτήν τη χρονική σήμανση. Η μορφή της είναι ίδια με την τιμή που επιστρέφει η συνάρτηση
time.time()και το χαρακτηριστικόst_mtimeτου αντικειμένου που επιστρέφει η συνάρτησηos.stat().
Άλλαξε στην έκδοση 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 έχει καταργηθεί.-
-
gzip.compress(data, compresslevel=9, *, mtime=None)¶ Compress the data, returning a
bytesobject containing the compressed data. compresslevel and mtime have the same meaning as in theGzipFileconstructor above.Νέο στην έκδοση 3.2.
Άλλαξε στην έκδοση 3.8: Προστέθηκε η παράμετρος mtime για αναπαραγώγιμη έξοδο.
-
gzip.decompress(data)¶ Decompress the data, returning a
bytesobject containing the uncompressed data.Νέο στην έκδοση 3.2.
Παραδείγματα χρήσης¶
Παράδειγμα ανάγνωσης ενός συμπιεσμένου αρχείου:
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.
Διεπαφή Γραμμής Εντολών¶
Το module gzip παρέχει μια απλή διεπαφή γραμμής εντολών για τη συμπίεση ή αποσυμπίεση αρχείων.
Μόλις εκτελεστεί, το module gzip διατηρεί το(α) αρχείο(α) εισόδου.
Άλλαξε στην έκδοση 3.8: Προστέθηκε νέα διεπαφή γραμμής εντολών με οδηγίες χρήσης. Από προεπιλογή, όταν εκτελείτε την CLI, το προεπιλεγμένο επίπεδο συμπίεσης είναι 6.
Επιλογές γραμμής εντολών¶
-
--fast¶ Δηλώνει τη γρηγορότερη μέθοδο συμπίεσης (λιγότερη συμπίεση).
-
--best¶ Δηλώνει την βραδύτερη μέθοδο συμπίεσης (καλύτερη συμπίεση).
-
-d,--decompress¶ Αποσυμπιέζει το δοσμένο αρχείο.
-
-h,--help¶ Εμφανίζει το μήνυμα βοήθειας.