Hoy vamos a ver un tutorial que tratará sobre la compresión y descompresión de datos en Python, una tarea muy fácil, ya que contamos con ciertos módulos que nos permitirán llevar a cabo esta labor de comprimir datos. Las librerías son: zlib, gzip, bz2, zipfile y tarfile.
A lo largo del tutorial veremos ejemplos sobre alguna de las librerías para aprender cómo se usa, es la mejor manera de comprender el funcionamiento.
Vamos a empezar con los ejemplos. Todos ellos van a ser sencillos y fáciles de comprender.
1. Módulo zlib
Vamos a ver un par de ejemplos con esta librería, ambos serán fáciles como ya dijimos antes.
Tenemos el siguiente código, cómo puedes observar es breve:
import zlib as zl line = b"Esto solo es una prueba para el tutorial que se va a publicar en Solvetic" line_compress = zl.compress(line) print("Tamaño sin comprimir %d" % len(line)) print("Tamaño comprimido %d" % len(line_compress))Comprimimos la línea original y mostramos lo que ocupa una y otra, obteniendo la siguiente salida:
Ahora vamos a ver como descomprimir en el siguiente ejemplo.
En el siguiente código vamos a comprimir una línea, la mostramos comprimida, y la descomprimimos para mostrarla.
import zlib as zl line = b"Testing Python zlib" line_compress = zl.compress(line) print(line_compress) line_decompress = zl.decompress(line_compress) print(line_decompress) print(line_decompress.decode("utf-8"))La última línea del código la utilizamos para pasar de bytes a string (usando utf-8 en la decodificación), ya que la penúltima línea mostrará una b al principio. La salida del programa es el siguiente:
Pasamos ahora a ver otra librería como es gzip.
2. Módulo gzip
Los ejemplos visto anteriormente son válidos para esta librería, veamos el ejemplo 1 igual que el anterior, solo cambiando la librería.
El código que tenemos es el siguiente, igual al anterior cambiando zlib por gzip:
import gzip line = b"Esto solo es una prueba para el tutorial que se va a publicar en Solvetic" line_compress = gzip.compress(line) print("Tamaño sin comprimir %d" % len(line)) print("Tamaño comprimido %d" % len(line_compress))Si ejecutamos, tenemos la siguiente salida:
Pesa más la compresión que la que no está comprimida. Si cambiamos el texto por uno mayor y ejecutamos:
Ahora si ha mejorado el tamaño, pero sigue comprimiendo mejor zlib, a continuación se pone una captura, la primera ejecución usa zlib y la segunda gzip.
Vamos a por el siguiente ejemplo, que será el útlimo.
Ahora escribiremos y leeremos de un fichero, el código es el siguiente:
import gzip fw = gzip.open('test.txt.gz', 'wb') fw.write(b"Testing gzip") fw.close() fr = gzip.open('test.txt.gz', 'rb') print(fr.read().decode("utf-8")) fr.close()Puedes apreciar que no tratamos las posibles excepciones que puedan surgir, esto se ha omitido para que el ejemplo sea más corto y directo. Si ejecutamos el código, tenemos la siguiente salida:
Hemos visto unos ejemplos de uso de las librerías zlib y gzip, puedes consultar la documentación oficial de Python para profundizar y ver mejor estos módulos y los arriba mencionados. Y por si te interesa te dejamos el enlace a otro tutorial sobre Python: Serializar y deserializar.