gzip — Υποστήριξη για αρχείαgzip

Πηγαίος κώδικας:Lib/gzip.py


Αυτό το module παρέχει μια απλή διεπαφή για τη συμπίεση και αποσυμπίεση αρχείων όπως ακριβώς θα έκαναν τα προγράμματα της GNUgzip και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.

exceptiongzip.BadGzipFile

Μια εξαίρεση γίνεται raise για μη έγκυρα αρχεία gzip. Κληρονομεί από τηνOSError. Οι εξαιρέσειςEOFError καιzlib.error μπορούν επίσης να γίνουν raise για μη έγκυρα αρχεία gzip.

Added in version 3.8.

classgzip.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=0)

Συμπιέζει ταdata και επιστρέφει ένα αντικείμενοbytes που περιέχει τα συμπιεσμένα δεδομένα. Οι παράμετροιcompresslevel καιmtime έχουν την ίδια σημασία όπως στον κατασκευαστή της κλάσηςGzipFile, αλλά τοmtime έχει προεπιλεγμένη τιμή 0 για αναπαραγώγιμη έξοδο.

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 και παλαιότερα.

Άλλαξε στην έκδοση 3.14:Η παράμετροςmtime έχει πλέον την προεπιλεγμένη τιμή 0 για αναπαραγώγιμη έξοδο. Για την προηγούμενη συμπεριφορά χρήστης της τρέχουσας ώρας, μεταβιβάστε στην παράμετροmtime την τιμήNone.

gzip.decompress(data)

Αποσυμπιέζει ταdata και επιστρέφει ένα αντικείμενοbytes που περιέχει τα αποσυμπιεσμένα δεδομένα. Αυτή η συνάρτηση μπορεί να αποσυμπιέσει δεδομένα gzip πολλαπλών μελών (πολλαπλά μπλοκ gzip που έχουν ενωθεί μεταξύ τους). Όταν τα δεδομένα είναι βέβαιο ότι περιέχουν μόνο ένα μέλος, η συνάρτησηzlib.decompress() μεwbits ρυθμισμένο σε 31 είναι ταχύτερη.

Added in version 3.2.

Άλλαξε στην έκδοση 3.11:Η ταχύτητα βελτιώνεται αποσυμπιέζοντας τα μέλη απευθείας στην μνήμη αντί να γίνεται αποσυμπίεση σε ροή.

Παραδείγματα χρήσης

Παράδειγμα ανάγνωσης ενός συμπιεσμένου αρχείου:

importgzipwithgzip.open('/home/joe/file.txt.gz','rb')asf:file_content=f.read()

Παράδειγμα δημιουργίας ενός συμπιεσμένου αρχείου GZIP:

importgzipcontent=b"Lots of content here"withgzip.open('/home/joe/file.txt.gz','wb')asf:f.write(content)

Παράδειγμα συμπίεσης ενός υπάρχοντος αρχείου σε μορφή GZIP:

importgzipimportshutilwithopen('/home/joe/file.txt','rb')asf_in:withgzip.open('/home/joe/file.txt.gz','wb')asf_out:shutil.copyfileobj(f_in,f_out)

Παράδειγμα συμπίεσης μιας δυαδικής συμβολοσειράς σε μορφή GZIP:

importgzips_in=b"Lots of content here"s_out=gzip.compress(s_in)

Δείτε επίσης

Modulezlib

Το βασικό module συμπίεσης δεδομένων που απαιτείται για την υποστήριξη της μορφής αρχείουgzip.

Σε περίπτωση που η (από)συμπίεση gzip είναι ένα σημείο συμφόρησης, το πακέτοpython-isal επιταχύνει την (από)συμπίεση με ένα ως επί το πλείστον συμβατό API.

Διεπαφή Γραμμής Εντολών

Το modulegzip παρέχει μια απλή διεπαφή γραμμής εντολών για τη συμπίεση ή αποσυμπίεση αρχείων.

Μόλις εκτελεστεί, το modulegzip διατηρεί το(α) αρχείο(α) εισόδου.

Άλλαξε στην έκδοση 3.8:Προστέθηκε νέα διεπαφή γραμμής εντολών με οδηγίες χρήσης. Από προεπιλογή, όταν εκτελείτε την CLI, το προεπιλεγμένο επίπεδο συμπίεσης είναι 6.

Επιλογές γραμμής εντολών

file

Εάν δεν καθοριστεί τοfile, η ανάγνωση γίνεται από τοsys.stdin.

--fast

Δηλώνει τη γρηγορότερη μέθοδο συμπίεσης (λιγότερη συμπίεση).

--best

Δηλώνει την βραδύτερη μέθοδο συμπίεσης (καλύτερη συμπίεση).

-d,--decompress

Αποσυμπιέζει το δοσμένο αρχείο.

-h,--help

Εμφανίζει το μήνυμα βοήθειας.