"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".
   "EOFError" and "zlib.error" can 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 "GzipFile" class, which simulates most of the
   methods of a *file object*, with the exception of the "truncate()"
   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 "GzipFile" object's "close()" method does not close
   *fileobj*, since you might wish to append more material after the
   compressed data.  This also allows you to pass an "io.BytesIO"
   object opened for writing as *fileobj*, and retrieve the resulting
   memory buffer using the "io.BytesIO" object's "getvalue()" method.

   "GzipFile" supports the "io.BufferedIOBase" interface, including
   iteration and the "with" statement.  Only the "truncate()" 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()".

   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* έχει καταργηθεί.

gzip.compress(data, compresslevel=9, *, mtime=None)

   Compress the *data*, returning a "bytes" object containing the
   compressed data.  *compresslevel* and *mtime* have the same meaning
   as in the "GzipFile" constructor above.

   Νέο στην έκδοση 3.2.

   Άλλαξε στην έκδοση 3.8: Προστέθηκε η παράμετρος *mtime* για
   αναπαραγώγιμη έξοδο.

gzip.decompress(data)

   Decompress the *data*, returning a "bytes" object 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.


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

file

   If *file* is not specified, read from "sys.stdin".

--fast

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

--best

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

-d, --decompress

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

-h, --help

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