Zlib Python

Zlib Python

La Biblioteca Python Zlib ofrece una interfaz de Python para la Biblioteca ZLIB escrita con C, una generalización de nivel superior para los métodos de compresión sin pérdida desinflados. Puede usar la función de compresión de ZLIB en productos comerciales porque es gratuito y no patentado. Es portátil en varias plataformas porque utiliza la compresión sin pérdidas, lo que evita la pérdida de datos durante la compresión y la descompresión. Otra ventaja significativa es que este método de compresión no amplía los datos. Los métodos ZLIB para comprimir y descomprimir los datos, DataStream y los archivos se cubrirán en este tutorial.

¿Por qué usar Zlib en Python??

En términos de seguridad, esta biblioteca/módulo juega un papel importante. Numerosas aplicaciones necesitan la capacidad de comprimir y descomprimir datos arbitrarios, incluidas cadenas, archivos y contenido estructurado en memoria. Una de las mejores características del módulo ZLIB es su compatibilidad con el formato GZIP Tool/File, que es una aplicación de compresión ampliamente utilizada y popular en UNIX.

¿Cómo usamos las funciones de compresión y descompresión de Zlib en Python??

La compresión y la descompresión son las dos funciones más significativas que ofrecen la Biblioteca ZLIB. Tanto las operaciones de compresión como de descompresión se pueden hacer como operaciones únicas o dividiendo los datos en fragmentos, como vería en un flujo de datos. La siguiente sección explicará ambos modos de operación.

Compresión en Python Zlib

Ahora, veremos cómo comprimir una cadena de datos, cadenas de datos y archivos utilizando la biblioteca ZLIB.

Comprimir cadenas de datos

Compresar una cadena es posible con la ayuda de la función Compress de la biblioteca ZLIB (). La sintaxis de esta función es bastante simple y solo requiere dos argumentos.

Sintaxis:

compress (data_string, nivel)

Aquí, Data_String es la cadena de datos que se comprimirán, y el argumento de nivel puede especificarse mediante un valor entero que podría variar de -1 a 9. Este parámetro de nivel determina el nivel de compresión. Si el nivel se especifica como 1, el nivel de compresión será el más bajo/mínimo. Sin embargo, será el más rápido. El nivel más lento de compresión, yo.mi., 9, produce el nivel de compresión más alto/máximo. El valor predeterminado, nivel 6, está representado por el valor -1. La velocidad y la compresión están equilibradas en el valor predeterminado. No hay compresión en el nivel 0.

A continuación se proporciona un ejemplo de cómo usar el método de compresa en una cadena:

Si especificamos el parámetro de nivel como 0, no habrá compresión:

Al comparar los resultados, el nivel de compresión se establece en 0 y 2. Puede que veas una pequeña diferencia. En formato hexadecimal, en nivel = 2, la función ha devuelto una cadena de longitud 62, mientras que, en el nivel 0, se devuelve una cadena de longitud 68. Esta diferencia de longitud viene porque no se produce compresión en el nivel 0.

Compresando flujos de datos

El método compressObj () puede manejar grandes flujos de datos. La función ComressObj () devuelve un objeto de compresión.

Sintaxis:

compressObj (nivel, método, wbit, memblevel, estrategia)

Además del parámetro de datos de cadena, la única distinción entre los parámetros de este método y los de compress () es el parámetro WBITS, que regula el tamaño de la ventana y determina si incluye o no el encabezado y el remolque en la salida. Los siguientes son valores posibles de WBITS:

Rango de valores Logaritmo de tamaño de ventana Producción
+9 a +15 Base 2 Se incluyen los encabezados de trailer y zlib.
+9 a -15 Representar el valor absoluto del WBIT. El encabezado y el trailer están excluidos.
+25 a +31 Los cuatro bits más bajos del valor. Se incluye el encabezado y la suma de verificación.

El argumento del método especificará el algoritmo de compresión. El algoritmo predeterminado, o el algoritmo disponible actualmente, se desinfla. El argumento de la estrategia define el ajuste de la compresión.

El siguiente código muestra cómo usar la función ComressObj ():

Utilizamos datos de cadena simples que no son un flujo de datos grande para demostrar cómo funciona la función CompressObj (). La cadena "Me encanta escribir códigos de python" se ha comprimido. Este método generalmente se emplea cuando las transmisiones son demasiado grandes o difíciles de almacenar en la memoria. Esta técnica es crucial en aplicaciones más grandes porque podemos personalizar la compresión y usarla para comprimir datos en trozos/series.

Comprimir un archivo

El archivo se comprimirá utilizando la función de compresión (). El .El archivo DOCX se comprimirá en el ejemplo a continuación.

El mejor nivel de compresión ofrecido por este algoritmo, z Mejor compresión, se utiliza en la función de compresa. La relación de la longitud de los datos comprimidos a la longitud de los datos originales se utiliza para calcular el nivel de compresión de datos. El archivo está comprimido 6%, como se ve en la salida.

Descompresión en Python Zlib

Ahora, veremos cómo descomprimir una cadena de datos, cadenas de datos y archivos utilizando la biblioteca ZLIB.

Descomprimiendo las cadenas de datos

La función Decompress () hace que sea fácil descomprimir una cadena de datos comprimidos.

Sintaxis:

descompresión (data_string, wbit, bufsize)

Esta función descomprime los bytes de datos de cadena. El tamaño del búfer del historial se puede establecer utilizando el parámetro WBITS. El tamaño de la ventana más grande se usa como configuración predeterminada. El encabezado y el remolque del archivo comprimido también se les pide que se incluyan. Los valores posibles son:

Rango de valores Tamaño de ventana Aporte
+8 a +15 Base 2 Se incluyen los encabezados de trailer y zlib.
-8 a -15 El valor absoluto del WBIT. Se excluyen la corriente cruda, el encabezado y el remolque.
+24 a +31 = 16 + (8 a 15) Los cuatro bits más bajos del valor. Se incluyen los encabezados de trailer y zlib.
+40 a +47 = 32 + (8 a 15) Los cuatro bits más bajos del valor. formato GZIP o ZLIB

El argumento de BufSize especifica el valor inicial del tamaño del búfer. Sin embargo, la característica clave de este argumento es que si lo especificado no es exacto, se ajustará automáticamente si se requiere más tamaño de búfer. La cadena de datos que está comprimida puede descomprimirse utilizando el siguiente ejemplo:

Descomprimiendo flujos de datos

Dependiendo de la fuente y el tamaño de sus datos, la descomprimición de grandes flujos de datos puede requerir la gestión de la memoria. El método DecompressObj () le permite dividir una secuencia de datos en múltiples fragmentos que podemos descomprimir por separado si no puede usar todos los recursos o no tiene suficiente memoria.

Sintaxis:

Decompressobj (WBITS [, Zdict])

Para descomprimir los datos particulares, utilizaremos el objeto de descompresión que devuelve la función DecompressObj (). El parámetro WBITS tiene las mismas características que las descritas anteriormente para la función Decompress ().

La longitud comprimida es 34. Después de descomprimir, se devuelve la longitud de la corriente de 26, que era el tamaño real de nuestro flujo de datos.

Descomprimir un archivo

Los datos en el archivo se pueden descomprimir fácilmente, como hemos visto en ejemplos anteriores. La única diferencia entre este ejemplo y la anterior es que la función Decompress () se usará después de obtener los datos comprimidos del archivo. Este método es útil cuando los datos son lo suficientemente compactos como para encajar convenientemente en la memoria.

La muestra.Se ha leído el archivo txt que contiene la cadena "Hola mundo, amo a Python". Elegimos usar descompress () en lugar de descompressobj () porque el archivo contiene una pequeña cadena.

Conclusión

Discutimos que cuando una aplicación requiere una compresión segura, el módulo Python Zlib es útil. Aunque la biblioteca Zlib tiene muchas funciones, hemos cubierto algunas de las más comunes. Las funciones Compress () y Decompress () se utilizan para datos pequeños, mientras que las funciones CompressObj () y DecompressObj () proporcionan la compresión y la descompresión de grandes flujos de datos, y por lo tanto ofrecen una mayor flexibilidad.