Сообщить об ошибке.

Функция open() модуля gzip в Python

Открыть сжатый gzip файл для чтения/записи

Синтаксис:

import gzip

fg = gzip.open(filename, mode='rb', compresslevel=9, \
               encoding=None, errors=None, \
               newline=None)

Параметры:

  • filename - имя сжатого файла,
  • mode='rb' - режим чтения/записи gzip,
  • compresslevel=9 - int, уровень сжатия,
  • encoding=None - кодировка для текстового режима,
  • errors=None - ообработчик ошибок кодировки для текстового режима,
  • newline=None - окончания строк для текстового режима.

Возвращаемое значение:

Описание:

Функция open() модуля gzip открывает filename сжатый gzip файл в двоичном или текстовом режиме для чтения или записи, возвращая объект файла.

Аргумент filename может представлять собой фактическое имя файла - объект str или bytes или существующий объект файла для чтения или записи.

Аргументом mode может быть:

  • для двоичного режима любой из 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' или 'xb';
  • для текстового режима 'rt', 'at' , 'wt' или 'xt' .
  • по умолчанию режим mode равен 'rb'.

Аргументом compresslevel является целое число от 0 до 9, как для конструктора класса gzip.GzipFile().

Для двоичного режима эта функция эквивалентна конструктору класса gzip.GzipFile(): GzipFile(filename, mode, compresslevel). В этом случае аргументы encoding, errors and newline не должны предоставляться.

Для текстового режима создается объект GzipFile, который оборачивается в экземпляр io.TextIOWrapper с указанным кодировки encoding, обработчика ошибок errors и окончанием(ями) строки newline.

Примеры использования:

Создаем сжатый файл GZIP:

import gzip, os

# подготовим данные
text = 'Привет docs-python.ru '
data = []
for _ in range(50):
    data.append(text * 25)

with gzip.open('file.txt.gz', 'wt') as fp:
    fp.write('\n\n'.join(data))

>>> os.system('file file.txt.gz')
# file.txt.gz: gzip compressed data, was "file.txt", 
# last modified: Wed May 20 14:10:47 2020, 
# max compression

Прочитаем сжатый GZIP файл file.txt.gz, выведем первые 22 символа и за одно распакуем:

import gzip

with gzip.open('file.txt.gz', 'rb') as fr, \
            open('file.txt', 'wb') as fw:
    bytes_data = fr.read()
    fw.write(bytes_data)

# если открыть файл 'file.txt.gz' в текстовом 
# режиме 'rt', декодировать данные не нужно
>>> data = bytes_data.decode('utf-8')
>>> print(data[:22])
# Привет docs-python.ru Привет

Сжимаем существующий файл:

import gzip, shutil, os

with open('file.txt', 'rb') as f_in:
    with gzip.open('sample-file.txt.gz', 'wb') as f_out:
        shutil.copyfileobj(f_in, f_out)

>>> os.system('file sample-file.txt.gz')
# sample-file.txt.gz: gzip compressed data, was "sample-file.txt", 
# last modified: Wed May 20 14:24:00 2020, max compression
>>> os.path.getsize('file.txt')
# 27598
>>> os.path.getsize('sample-file.txt.gz')
# 195