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.