Как сжимать файлы с модулем gzip в Python используя compress и decompress


27 мая 2021


Используем модуль gzip в Python на примере сжатия и распаковки

Модуль gzip в Python имеет тот же функционал, что и аналогичная программа в Linux. Основная задача gzip сжимать (compress) разжимать (decompress) данные. Рассмотрим эти операции, а так же чтение и запись в такие файлы на примерах.

Модуль входит в базовый комплект Python и дополнительно его устанавливать не нужно.

 

Сжатие и распаковка строк

Мы можем сжимать строки предварительно преобразовав их в байты, как в следующем примере:

import gzip
 
a = bytes('Строка', 'utf-8')
out = gzip.compress(a)

Сжатие строк с методом compress в модуле gzip Python 3

Распаковываем строку обратно:

b = gzip.decompress(out)
b = b.decode('utf-8')

Распаковка сжатых строк с методом decompress в модуле gzip Python 3

 

Сжатие и распаковка файлов

Есть 2 способа сжать и распаковать файл. Первый - использовав класс GzipFile:

import gzip

# сжимаем
a = bytes('Какие-то данные', 'utf-8')
gzip_file = gzip.GzipFile("./file.gz", 'wb')
gzip_file.write(a)
gzip_file.close()

# чтение
gzip_file = gzip.GzipFile("./file.gz", 'rb')
data = gzip_file.read()
# преобразовываем в строку
data = data.decode('utf-8')

Сжатие созданного файла на примере GzipFile в модуле gzip Python 3

Есть так же метод open(), который выполняет те же задачи. Его отличие в том, что GzipFile всегда открывает файлы в двоичном режиме, когда метод open() делает это в текстовом. Пример работы с TextIOWrapper:

import gzip
import io

# сжимаем
with gzip.open('./file2.gz', 'wb') as f:
        with io.TextIOWrapper(f, encoding='utf-8') as encode:
            encode.write('Какой-то текст 2')

# распаковываем
with gzip.open('./file2.gz', 'rb') as f:
        with io.TextIOWrapper(f, encoding='utf-8') as decoder:
            content = decoder.read()

Сжатие созданного файла на примере метода open в модуле gzip Python 3

К классу и методу можно добавить параметр 'compresslevel=' со значением от 0 до 9.

 

...

Теги: #python


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.