Zlib Python

Zlib Python

A biblioteca Python Zlib oferece uma interface Python para a biblioteca Zlib-Breten, uma generalização de nível superior para métodos de compressão sem perdas deflatados. Você pode usar o recurso de compressão ZLIB em produtos comerciais porque é gratuito e não patenteado. É portátil em várias plataformas porque usa compactação sem perdas, o que impede a perda de dados durante a compressão e a descompressão. Outra vantagem significativa é que esse método de compressão não aumenta os dados. Os métodos do ZLIB para compactar e descomprimir dados, datastream e arquivos serão abordados neste tutorial.

Por que usar o Zlib em Python?

Em termos de segurança, esta biblioteca/módulo desempenha um papel significativo. Numerosos aplicativos precisam da capacidade de compactar e descomprimir dados arbitrários, incluindo seqüências de caracteres, arquivos e conteúdo estruturado na memória. Uma das melhores características do módulo ZLIB é sua compatibilidade com o formato GZIP Tool/File, que é um aplicativo de compactação amplamente utilizado e popular no Unix.

Como usamos as funções de compressão e descompressão de Zlib no Python?

Compressão e descompressão são as duas funções mais significativas oferecidas pela Biblioteca Zlib. As operações de compressão e descompressão podem ser feitas como operações únicas ou dividindo os dados em pedaços, como você veria em um fluxo de dados. A seção a seguir explicará os dois modos de operação.

Compressão em python zlib

Agora, veremos como comprimir uma sequência de dados, strings de dados e arquivos usando a biblioteca ZLIB.

Strings de dados de compactação

Comprimindo uma string é possível com a ajuda da função Compress () da biblioteca Zlib (). A sintaxe desta função é bastante simples e requer apenas dois argumentos.

Sintaxe:

compactar (data_string, nível)

Aqui, Data_String é a sequência de dados a serem compactados, e o argumento de nível pode ser especificado por um valor inteiro que pode variar de -1 a 9. Este parâmetro de nível determina o nível de compressão. Se o nível for especificado como 1, o nível de compressão será o menor/mínimo. No entanto, será o mais rápido. O nível mais lento de compressão, eu.e., 9, produz o nível mais alto/máximo de compressão. O padrão, o nível 6, é representado pelo valor -1. A velocidade e a compressão são equilibradas no valor padrão. Não há compressão no nível 0.

Um exemplo de como usar o método de compactação em uma string é fornecido abaixo:

Se especificarmos o parâmetro de nível como 0, não haverá compactação:

Ao comparar os resultados, o nível de compressão é definido como 0 e 2. Você pode ver uma pequena diferença. No formato hexadecimal, no nível = 2, a função retornou uma sequência de comprimento 62, enquanto, no nível 0, uma sequência de comprimento 68 é retornada. Essa diferença de comprimento ocorre porque nenhuma compressão ocorre no nível 0.

Comprimindo fluxos de dados

O método CompressObj () pode lidar com grandes fluxos de dados. Um objeto de compressão é retornado pela função Compressobj ().

Sintaxe:

compressobj (nível, método, wbit, memlevel, estratégia)

Além do parâmetro de dados da string, a única distinção entre os parâmetros desse método e os do compact () é o parâmetro WBITS, que regula o tamanho da janela e determina se deve ou não incluir o cabeçalho e o trailer na saída. Os seguintes são possíveis valores do WBITs:

Faixa de valor Logaritmo do tamanho da janela Saída
+9 a +15 Base 2 Os cabeçalhos do trailer e Zlib estão incluídos.
+9 a -15 Representar o valor absoluto do WBIT. O cabeçalho e o trailer são excluídos.
+25 a +31 Os quatro bits mais baixos do valor. O cabeçalho e a soma de verificação à direita estão incluídos.

O argumento do método especificará o algoritmo de compactação. O algoritmo padrão, ou algoritmo atualmente disponível, está esvaziado. O argumento da estratégia define ajuste de compressão.

O código a seguir mostra como usar a função CompressObj ():

Utilizamos dados simples de string que não são um grande fluxo de dados para demonstrar como a função Compressobj () opera. A string "Eu amo escrever códigos python" foi compactada. Este método é normalmente empregado quando os fluxos são muito grandes ou difíceis de armazenar na memória. Essa técnica é crucial em aplicações maiores, porque podemos personalizar a compactação e usá -la para comprimir dados em pedaços/séries.

Comprimindo um arquivo

O arquivo será compactado usando a função de compressão (). O .O arquivo docx será comprimido no exemplo abaixo.

O melhor nível de compactação oferecido por este algoritmo, Z Best Compact, é usado na função de compactação. A proporção do comprimento dos dados compactados e o comprimento dos dados originais é usado para calcular o nível de compactação de dados. O arquivo é 6% comprimido, como visto na saída.

Descompressão no python zlib

Agora, veremos como descomprimir uma sequência de dados, strings de dados e arquivos usando a biblioteca ZLIB.

Descompactar seqüências de dados

A função descompressor () simplifica descomprimir uma sequência de dados compactados.

Sintaxe:

descompacte (data_string, wbit, bufsize)

Esta função descomprima os bytes de dados da string. O tamanho do buffer de história pode ser definido usando o parâmetro WBITS. O tamanho da maior janela é usado como configuração padrão. O cabeçalho e o trailer do arquivo compactado também são solicitados a serem incluídos. Valores possíveis são:

Faixa de valor Tamanho da janela Entrada
+8 a +15 Base 2 Os cabeçalhos do trailer e Zlib estão incluídos.
-8 a -15 O valor absoluto do WBIT. Fluxo bruto, cabeçalho e trailer são excluídos.
+24 a +31 = 16 + (8 a 15) Os quatro bits mais baixos do valor. Os cabeçalhos do trailer e Zlib estão incluídos.
+40 a +47 = 32 + (8 a 15) Os quatro bits mais baixos do valor. Formato Gzip ou Zlib

O argumento bufsize especifica o valor inicial do tamanho do buffer. No entanto, a principal característica desse argumento é que, se o especificado não for exato, será ajustado automaticamente se mais tamanho do buffer for necessário. A sequência de dados compactada pode ser descomprimida usando o seguinte exemplo:

Descompactando fluxos de dados

Dependendo da fonte e tamanho de seus dados, descompactar grandes fluxos de dados podem exigir gerenciamento de memória. O método descompressobj () permite dividir um fluxo de dados em vários pedaços que podemos descomprimir separadamente se você não puder usar todos os recursos ou não ter memória suficiente.

Sintaxe:

descompressobj (wbits [, zdict])

Para descomprimir os dados específicos, usaremos o objeto de descompressão que a função descompressobj () retorna. O parâmetro wbits possui os mesmos recursos que os descritos anteriormente para a função descompressa ().

O fluxo compactado de comprimento é 34. Após descompressão, o comprimento do fluxo de 26 é retornado, que era o tamanho real do nosso fluxo de dados.

Descompactando um arquivo

Os dados no arquivo podem ser facilmente descomprimidos, como vimos em exemplos anteriores. A única diferença entre este exemplo e a anterior é que a função descompressa () será usada após obter os dados compactados do arquivo. Este método é útil quando os dados são compactos o suficiente para se encaixar convenientemente na memória.

A amostra.Arquivo TXT contendo a string "Hello World I Love Python" foi lido. Optamos por usar descompacte () em vez de descompresentar () porque o arquivo contém uma pequena string.

Conclusão

Discutimos que quando um aplicativo requer compactação segura, o módulo Python Zlib é útil. Embora a biblioteca Zlib tenha muitas funções, cobrimos alguns dos mais comuns. As funções compact () e descompacte () são usadas para pequenos dados, enquanto as funções Compressobj () e descompressobj () fornecem a compactação e descompressão de grandes fluxos de dados e, portanto, oferecem maior flexibilidade.