Рубрики
Без рубрики

Python GZIP – компресс декомпресс

Модуль GZIP Python используется для сжатия файлов и декомпрессии. Это похоже на команды GNU Gzip и Gunzip. Мы можем использовать модуль GZIP с потоком данных.

Автор оригинала: Pankaj Kumar.

Module Python GZIP обеспечивает очень простой способ сжать и распаковать файлы и работать аналогично программам GNU Гжип и Gunzip Отказ

В этом уроке мы изучим, какие классы присутствуют в этом модуле, который позволяет нам выполнять упомянутые операции вместе с дополнительными функциями, которые он обеспечивает.

Python GZIP модуль

Этот модуль дает нам Гжип Класс, который содержит некоторые удобные функции, такие как Открыть () , Compress () и Декомпресс () Отказ

Преимущество Гжип Класс предоставляет нам, что он читает и пишет Гжип Файлы и автоматически сжимаются и распаковывают его так, чтобы в программе они выглядят как обычные файловые объекты.

Важно помнить, что другие форматы, которые поддерживаются программами Гжип и Gunzip не поддерживаются этим модулем.

Использование GZIP модуля

Теперь мы начнем использовать функции, которые мы упоминали, чтобы выполнить операции сжатия и декомпрессии.

Написание сжатых файлов с открытым ()

Начнем с функции Open (), которая создает экземпляр Gzipfile и открыть файл с WB Режим для записи в сжатый файл:

import gzip
import io
import os

output_file_name = 'jd_example.txt.gz'
file_mode = 'wb'

with gzip.open(output_file_name, file_mode) as output:
    with io.TextIOWrapper(output, encoding='utf-8') as encode:
        encode.write('We can write anything in the file here.\n')

print(output_file_name, 
        'contains', os.stat(output_file_name).st_size, 'bytes')
os.system('file -b --mime {}'.format(output_file_name))

Давайте посмотрим на вывод этой программы:

Python Gzip Пишите на сжатый файл

Чтобы написать в сжатый файл, мы впервые открыли его в WB Режим и завернутый экземпляр Gzipfile с TextioWrapper из Модуль IO Чтобы кодировать текст Unicode к байтам, который подходит для сжатия.

Написание нескольких строк в сжатый файл

На этот раз мы будем использовать практически тот же скрипт, что мы использовали выше, но мы напишем к нему несколько строк. Давайте посмотрим на код, как это может быть достигнуто:

import gzip
import io
import os
import itertools

output_file_name = 'jd_example.txt.gz'
file_mode = 'wb'

with gzip.open(output_file_name, file_mode) as output:
    with io.TextIOWrapper(output, encoding='utf-8') as enc:
        enc.writelines(
            itertools.repeat('JournalDev, same line again and again!.\n', 10)
        )

os.system('gzcat jd_example.txt.gz')

Давайте посмотрим на вывод этой программы:

Написание нескольких строк в сжатый файл

Чтение сжатых данных

Теперь, когда мы закончили с помощью процесса написания файлов, мы можем прочитать данные сжатыми файлами. Теперь мы будем использовать другой режим файлов, который является RB Прочитайте режим.

import gzip
import io
import os

read_file_name = 'jd_example.txt.gz'
file_mode = 'rb'

with gzip.open(read_file_name, file_mode) as input_file:
    with io.TextIOWrapper(input_file, encoding='utf-8') as dec:
        print(dec.read())

Давайте посмотрим на вывод этой программы:

Читайте сжатый файл

Обратите внимание, что не было ничего особенного, мы здесь не сделали с GZIP-отдельной формой, передавая ее другой режим файла. Процесс чтения делается TextioWrapper который использует в качестве объекта файла, который предоставляется Гжип модуль.

Чтение потоков

Еще одним большим преимуществом GZIP-модуля предлагает то, что он может использоваться для обертывания других типов потоков, поэтому они также могут использовать сжатие. Это чрезвычайно полезно, когда вы хотите передавать много данных над веб-розетками.

Давайте посмотрим, как мы можем сжать и распаковать потоковые данные:

import gzip
from io import BytesIO
import binascii

write_mode = 'wb'
read_mode = 'rb'

uncompressed = b'Reiterated line n times.\n' * 8
print('Uncompressed Data:', len(uncompressed))
print(uncompressed)

buf = BytesIO()
with gzip.GzipFile(mode=write_mode, fileobj=buf) as file:
    file.write(uncompressed)

compressed = buf.getvalue()
print('Compressed Data:', len(compressed))
print(binascii.hexlify(compressed))

inbuffer = BytesIO(compressed)
with gzip.GzipFile(mode=read_mode, fileobj=inbuffer) as file:
    read_data = file.read(len(uncompressed))

print('\nReading it again:', len(read_data))
print(read_data)

Давайте посмотрим на вывод этой программы:

Читать поток

Обратите внимание, что во время записи нам не приходилось предоставлять никакие параметры длины. Но это было не так, когда мы перечитали данные. Нам пришлось пройти длину до Читать () функционировать явно.

Заключение

В этом уроке мы изучали модуль GZIP Python, который можно использовать для чтения и записи для сжатых файлов с большим преимуществом, что модули заставляет сжатый файл выглядит как просто обычный файл объект.

Ссылка: API док