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%