Модуль gzip в Python имеет тот же функционал, что и аналогичная программа в Linux. Основная задача gzip сжимать (compress) разжимать (decompress) данные. Рассмотрим эти операции, а так же чтение и запись в такие файлы на примерах.
Модуль входит в базовый комплект Python и дополнительно его устанавливать не нужно.
Сжатие и распаковка строк
Мы можем сжимать строки предварительно преобразовав их в байты, как в следующем примере:
import gzip
a = bytes('Строка', 'utf-8')
out = gzip.compress(a)
Распаковываем строку обратно:
b = gzip.decompress(out)
b = b.decode('utf-8')
Сжатие и распаковка файлов
Есть 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')
Есть так же метод 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()
К классу и методу можно добавить параметр 'compresslevel=' со значением от 0 до 9.
...
Подписывайтесь на наш Telegram канал
Теги: #python