gzip — Support for gzip files¶
Вихідний код: Lib/gzip.py
Цей модуль надає простий інтерфейс для стиснення та розпакування файлів, як це робили б програми GNU gzip і gunzip.
Стиснення даних забезпечується модулем zlib.
Модуль gzip забезпечує клас GzipFile, а також open(), compress() і decompress() зручні функції. Клас GzipFile читає та записує файли у форматі gzip, автоматично стискаючи або розпаковуючи дані, щоб вони виглядали як звичайний file object.
Зауважте, що додаткові формати файлів, які можна розпакувати програмами gzip і gunzip, наприклад ті, створені compress і pack, не підтримуються цим модуль.
Модуль визначає такі елементи:
-
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, як і для конструктора
GzipFile.Для бінарного режиму ця функція еквівалентна конструктору
GzipFile:GzipFile(filename, mode, compresslevel). У цьому випадку аргументи encoding, errors і newline не повинні надаватися.Для текстового режиму створюється об’єкт
GzipFile, який загортається в екземплярio.TextIOWrapperіз вказаним кодуванням, поведінкою обробки помилок і закінченнями рядків.Змінено в версії 3.3: Додано підтримку того, що ім’я файлу є об’єктом файлу, підтримується текстовий режим, а також аргументи кодування, помилки та новий рядок.
Змінено в версії 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, у цьому випадку ім’я_файлу відкривається, щоб надати об’єкт файлу.Якщо fileobj не є
None, аргумент filename використовується лише для включення в заголовок файлу gzip, який може містити оригінальну назву нестисненого файлу. За замовчуванням ім’я файлу fileobj, якщо воно помітне; інакше за замовчуванням буде порожній рядок, і в цьому випадку оригінальна назва файлу не буде включена в заголовок.Аргумент mode може бути будь-яким із
'r','rb','a','ab','w','wb','x'або'xb', залежно від того, чи буде файл читатися чи записуватися. Типовим є режим fileobj, якщо він помітний; інакше за замовчуванням буде'rb'. У майбутніх випусках Python режим fileobj не використовуватиметься. Краще завжди вказувати режим для запису.Зауважте, що файл завжди відкривається у двійковому режимі. Щоб відкрити стислий файл у текстовому режимі, використовуйте
open()(або загорніть свійGzipFileуio.TextIOWrapper).Аргумент compresslevel є цілим числом від
0до9, що контролює рівень стиснення;1є найшвидшим і забезпечує найменше стиснення, а9є найповільнішим і забезпечує найбільше стиснення.0не стискає. Типовим значенням є9.The mtime argument is an optional numeric timestamp to be written to the last modification time field in the stream when compressing. It should only be provided in compression mode. If omitted or
None, the current time is used. See themtimeattribute for more details.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)¶ Read n uncompressed bytes without advancing the file position. At most one single read on the compressed stream is done to satisfy the call. The number of bytes returned may be more or less than requested.
Примітка
Хоча виклик
peek()не змінює позицію файлуGzipFile, він може змінити позицію основного файлового об’єкта (наприклад, якщоGzipFileбуло створено за допомогою fileobj параметр).Нове в версії 3.2.
-
mtime¶ When decompressing, the value of the last modification time field in the most recently read header may be read from this attribute, as an integer. The initial value before reading any headers is
None.All gzip compressed streams are required to contain this timestamp field. Some programs, such as gunzip, make use of the timestamp. The format is the same as the return value of
time.time()and thest_mtimeattribute of the object returned byos.stat().
Змінено в версії 3.1: Додано підтримку оператора
withразом з аргументом конструктора mtime і атрибутомmtime.Змінено в версії 3.2: Було додано підтримку файлів із нульовою підкладкою та файлів, які неможливо знайти.
Змінено в версії 3.3: Метод
io.BufferedIOBase.read1()тепер реалізовано.Змінено в версії 3.4: Додано підтримку режимів
'x'і'xb'.Змінено в версії 3.5: Додано підтримку запису довільних байт-подібних об’єктів. Метод
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)
Дивись також
- Модуль
zlib Базовий модуль стиснення даних, необхідний для підтримки формату файлу gzip.
Інтерфейс командного рядка¶
Модуль gzip забезпечує простий інтерфейс командного рядка для стиснення або розпакування файлів.
Після виконання модуль gzip зберігає вхідні файли.
Змінено в версії 3.8: Додайте новий інтерфейс командного рядка з використанням. За замовчуванням, коли ви будете виконувати CLI, рівень стиснення за замовчуванням становить 6.
Параметри командного рядка¶
-
--fast¶ Вказує найшвидший метод стиснення (з меншим стисненням).
-
--best¶ Вказує найповільніший метод стиснення (найкраще стиснення).
-
-d,--decompress¶ Розпакуйте вказаний файл.
-
-h,--help¶ Показати довідкове повідомлення.