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

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

Сжать/распаковать данные буфера при помощи gzip

Синтаксис:

import gzip

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

Параметры:

  • data - данные в виде байтов,
  • compresslevel=9 - int, уровень сжатия,
  • mtime=None - последнее изменение в потоке при сжатии.

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

  • gzip.compress() - сжатые дынные в виде байтов
  • gzip.decompress() - распакованные дынные в виде байтов

Описание:

Функция gzip.compress() сжимает данные data, возвращая объект байтов, содержащий сжатые данные.

Аргументы compresslevel и mtime имеют то же значение, что и в конструкторе класса gzip.GzipFile().

Функция gzip.decompress() распаковывает сжатые данные data, возвращая объект байтов, содержащий несжатые данные.

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

Сожмем данные, расположенные в переменной text. Процент сжатия увеличивается при увеличении объема данных.

>>> import gzip
# оригинальные данные
>>> text = 'Привет docs-python.ru ' * 10
# закодируем данные в байты
>>> data = text.encode('utf-8')
# сжимаем
>>> compress = gzip.compress(data)

# длинна оригинальных данных
>>> len(text)
# 160

# длинна сжатых данных
>>> len(compress)
# 47

# процент сжатия
>>> 100 - len(compress) * 100 / len(text)
# 70.625

Распакуем данные расположенные в переменной compress, и выведем их на печать.

>>> import gzip, pprint
# распаковываем данные 
>>> decompress = gzip.decompress(compress)
# декодируем полученные байты
>>> text = decompress.decode('utf-8')
>>> pprint.pprint(text, width=60)
# ('Привет docs-python.ru Привет docs-python.ru Привет docs-python.ru Привет '
#  'docs-python.ru Привет docs-python.ru Привет docs-python.ru Привет docs-python.ru '
#  'Привет docs-python.ru Привет docs-python.ru Привет docs-python.ru ')

Интересно наблюдать как увеличивается сжатие с увеличением объема данных.

import gzip

text = 'Привет docs-python.ru' * 3

for i in range(1, 9):
    text = text * i
    data = text.encode('utf-8')
    compress = gzip.compress(data)
    txt = len(text)
    pack = len(compress)
    proc = round((1 - pack/txt) * 100, 3)
    print(f'{txt} \t\t {pack} \t\t {proc}%')

# 45               45              0.0%
# 90               45              50.0%
# 270              47              82.593%
# 1080             56              94.815%
# 5400             86              98.407%
# 32400            177             99.454%
# 226800           837             99.631%
# 1814400          6221            99.657%