Coding for KidsCoding for Kids
Niveles CreativosDesafíosGuía del Maestro
Votar por funciones
Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel

Módulos de serialización
Módulos de Compresión

Objetivo

Toma mensajes y órdenes y comprímelos para archivarlos y transmitirlos.

Existen varias instrucciones de construcción, envíos y manifiestos que han sido presentados y necesitan ser transferidos o archivados. Aunque estos pueden enviarse manualmente, una buena manera de hacerlo es comprimir y descomprimir archivos para luego almacenarlos o enviarlos. Para ello, puedes usar módulos de compresión para disminuir el tamaño de los archivos y facilitar la gestión de la información. A diferencia de otros problemas que resolvimos donde aprendimos y usamos un único módulo, hay varios módulos de compresión que podemos utilizar con una pequeña selección de funciones. Son los siguientes:

Para una velocidad de compresión rápida y baja compresión, utiliza el módulo zlib, agregando import zlib. Para nuestros propósitos utilizaremos la siguiente función: zlib.compress(), la cual utiliza un argumento, que es la información que deseas comprimir. El argumento debe ingresarse como bytes en lugar de una cadena.

Para una velocidad de compresión media y compresión media, utiliza el módulo bz2, agregando import bz2. Para nuestros propósitos utilizaremos las siguientes funciones:

  • bz2.compress(), utiliza un argumento, que es la información que deseas comprimir.
  • bz2.decompress(), utiliza un argumento, que es la información que deseas comprimir. Debe ingresarse como bytes en lugar de una cadena.

Los argumentos deben ingresarse como bytes en lugar de una cadena.

Para una alta compresión pero con una velocidad de compresión lenta, utiliza el módulo lzma, agregando import lzma. Para nuestros propósitos utilizaremos las siguientes clases y funciones:

  • lzma.LZMACompressor(): Clase usada para crear objetos de compresión que te permiten activar un compresor.
  • compress(): utiliza un argumento, que es la información que deseas comprimir. Debe ingresarse como bytes en lugar de una cadena. El argumento debe ingresarse como bytes en lugar de una cadena.

Además de estos módulos, utilizaremos la función bytes(), que te permite convertir cadenas a bytes lo cual será útil para comprimir. Esta función toma dos argumentos, la cadena que deseas convertir y el formato, que para nuestros propósitos es 'utf-8'.

Existen tres constantes que contienen datos que deben ser comprimidos, estas se llaman red_message, blue_message y green_message. Para comenzar, camina hacia la marca de X dorada sobre la alfombra roja, crea una variable llamada red_bytes. Toma la constante red_message y convierte el mensaje en bytes para que los datos puedan ser comprimidos, utilizando la función bytes() formateada a 'utf-8', de la siguiente manera: red_bytes = bytes(red_message, 'utf-8').

Crea una variable llamada red_compression y almacena el valor de zlib.compress(). Utiliza red_bytes como argumento para comprimir los datos, de la siguiente manera: red_compression = zlib.compress(red_bytes). Una vez que los datos hayan sido comprimidos, utiliza la función pre-escrita display() en el editor de código y añade las variables red_message y red_compression como argumentos para leer el mensaje y ver los datos de compresión.

Camina hacia la marca de X clara sobre la alfombra roja y enfréntate al escritorio, crea dos variables llamadas: message_length y compression_length. En estas variables almacenaremos la longitud en caracteres de los datos tanto antes como después de la compresión utilizando la función len(). Por ejemplo, para message_length obtén la longitud de red_message, de la siguiente manera: message_length = len(red_message). Haz lo mismo para compression_length almacenando el len() de red_compression.

Una vez que ambas variables se hayan poblado, utiliza la función pre-escrita write() e inserta message_length y compression_length como argumentos para verificar los tamaños de la compresión. Esto demuestra cuánto se ha comprimido el archivo en comparación con cuando se deja sin comprimir.

Camina hacia la marca de X oscura sobre la alfombra azul, enfréntate a la computadora. Crea una variable llamada blue_bytes y convierte blue_message a bytes utilizando la función bytes() de la misma manera que lo hiciste con red_message. Toma la constante blue_message y comprímela almacenando el valor de bz2.compress() e insertando blue_bytes como argumento para comprimir los datos, de la siguiente manera: blue_message = bz2.compress(blue_bytes).

Crea una variable llamada blue_decompress y almacena el valor de bz2.decompress() y añade blue_message como argumento para ver los datos después de la descompresión. Añade las variables blue_message y blue_decompress a la función pre-escrita display() para ver las variantes comprimidas y descomprimidas de los datos del mensaje.

Dirígete hacia la marca de X oscura sobre la alfombra verde y crea un objeto llamado compressor y asígnale lzma.LZMACompressor(), esto creará un objeto compresor que puede ser utilizado con las funciones de lzma. Crea una variable llamada green_bytes y transforma green_message a formato bytes utilizando la función bytes() de la misma manera que lo hiciste con red_message y blue_message.

Crea una variable llamada green_compression y almacena compressor.compress() como valor, añadiendo green_bytes como variable. Esto te permitirá comprimir los datos del mensaje usando el objeto compresor. En la función pre-escrita display() añade las variables green_message y green_compression como argumentos para ver el mensaje y los datos comprimidos.

Camina hacia la marca de X clara sobre la alfombra verde y enfréntate al escritorio, modifica las dos variables llamadas: message_length y compression_length. En estas variables almacenaremos la longitud en caracteres de los datos tanto antes como después de la compresión utilizando la función len(). Para message_length obtén la longitud de green_message con len(). Haz lo mismo para compression_length almacenando el len() de green_compression. Una vez que ambas variables se hayan poblado, utiliza la función pre-escrita write() e inserta message_length y compression_length como argumentos para verificar los tamaños de la compresión y finalizar el nivel.

Libro de Código