gzip
— Підтримка файлів gzip¶
Вихідний код: 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 from
OSError
.EOFError
andzlib.error
can also be raised for invalid gzip files.Added in version 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 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
.Аргумент mtime — це необов’язкова цифрова позначка часу, яка записується в поле часу останньої модифікації в потоці під час стиснення. Його слід надавати лише в режимі стиснення. Якщо опущено або
None
, використовується поточний час. Дивіться атрибутmtime
для отримання додаткової інформації.Calling a
GzipFile
object’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.BytesIO
object opened for writing as fileobj, and retrieve the resulting memory buffer using theio.BytesIO
object’sgetvalue()
method.GzipFile
supports theio.BufferedIOBase
interface, including iteration and thewith
statement. Only thetruncate()
method isn’t implemented.GzipFile
також надає наступний метод і атрибут:- peek(n)¶
Читання n нестиснутих байтів без просування позиції файлу. Щонайбільше одне читання стисненого потоку виконується для задоволення виклику. Кількість повернених байтів може бути більшою або меншою за запитувану.
Примітка
Хоча виклик
peek()
не змінює позицію файлуGzipFile
, він може змінити позицію основного файлового об’єкта (наприклад, якщоGzipFile
було створено за допомогою fileobj параметр).Added in version 3.2.
- mtime¶
Під час декомпресії значення поля часу останньої модифікації в останньому прочитаному заголовку може бути прочитано з цього атрибута як ціле число. Початковим значенням перед читанням будь-яких заголовків є
None
.Усі стиснуті потоки gzip повинні містити це поле позначки часу. Деякі програми, такі як gunzip, використовують мітку часу. Формат такий самий, як значення, що повертається
time.time()
і атрибутомst_mtime
об’єкта, який повертаєos.stat()
.
- name¶
The path to the gzip file on disk, as a
str
orbytes
. Equivalent to the output ofos.fspath()
on the original input path, with no other normalization, resolution or expansion.
Змінено в версії 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.12: Remove the
filename
attribute, use thename
attribute instead.Застаріло починаючи з версії 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 theGzipFile
constructor above. When mtime is set to0
, this function is equivalent tozlib.compress()
with wbits set to31
. The zlib function is faster.Added in version 3.2.
Змінено в версії 3.8: Додано параметр mtime для відтворюваного виведення.
Змінено в версії 3.11: Speed is improved by compressing all data at once instead of in a streamed fashion. Calls with mtime set to
0
are delegated tozlib.compress()
for better speed.
- gzip.decompress(data)¶
Decompress the data, returning a
bytes
object containing the uncompressed data. This function is capable of decompressing multi-member gzip data (multiple gzip blocks concatenated together). When the data is certain to contain only one member thezlib.decompress()
function with wbits set to 31 is faster.Added in version 3.2.
Змінено в версії 3.11: Speed is improved by decompressing members at once in memory instead of in a streamed fashion.
Приклади вживання¶
Приклад читання стисненого файлу:
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¶
Показати довідкове повідомлення.