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 Marshal y Pickle

Objetivo

Ve a la estación de servicio y asegúrate de que los datos se almacenen correctamente usando el módulo JSON para formatear archivos.

Continuando a lo largo del camino, encontramos algunas estaciones que monitorean la distribución de agua y la calidad del suelo de las tierras que se están desarrollando para una futura cosecha. Para procesar los datos, es eficiente serializarlos. Aunque usar JSON puede ser efectivo como solución generalizada, también existen algunos métodos de serialización específicos de Python, como los módulos Marshal y Pickle. El módulo Marshal está diseñado para una serialización/deserialización rápida convirtiendo los datos en binario, ideal para transferencias de datos más simples. El módulo Pickle es más lento pero está diseñado para procesar estructuras de datos más complejas y es mucho más flexible, ideal para estructuras de datos más grandes o prioritarias.

Para utilizar los módulos Marshal y Pickle, importa sus funciones escribiendo: import marshal y import pickle. Para nuestros propósitos, usaremos las siguientes funciones:

  • marshal.dumps(): Serializa datos en un formato binario, diseñado para la velocidad en Python. Toma un argumento, que es el dato que deseas serializar, y está limitado a tipos de datos básicos.
  • marshal.loads(): Deserializa datos binarios en tipos de datos legibles por Python, limitado en sus capacidades pero con ejecución rápida. Toma un argumento, que es el dato a deserializar.
  • pickle.DEFAULT_PROTOCOL: Verifica qué versión del protocolo para la serialización con Pickle es la predeterminada en tu versión de Python. Los protocolos afectan cómo se serializan los datos.
  • pickle.HIGHEST_PROTOCOL: Verifica qué versión del protocolo para la serialización con Pickle es la más alta disponible en tu versión de Python. Los protocolos afectan cómo se serializan los datos.
  • pickle.dumps(): Serializa estructuras de datos complejas de Python en formato binario según el protocolo utilizado. Toma dos argumentos: los datos que deseas serializar y la versión del protocolo que deseas utilizar al serializar.
  • pickle.loads(): Deserializa datos binarios en tipos de datos legibles por Python, con gran capacidad para objetos de Python. Toma un argumento, que son los datos que deseas deserializar.

Además de estos módulos y funciones, también usaremos un módulo de formateo llamado pprint, que importaremos usando from pprint import pprint. Esto nos permite utilizar la función pprint() que puede formatear estructuras de datos como diccionarios, permitiéndonos mostrar la información de forma clara.

Para comenzar, camina hacia la marca X luminosa dentro de la pequeña estación de monitoreo y enfrenta el terminal de la computadora. La estación monitorea la presión del agua y las condiciones del suelo del terreno cercano que se está desarrollando para plantar cultivos. Existe una constante llamada reading, que contiene datos de Python recolectados por la estación.

Crea una variable llamada data y almacena el valor de la función marshal.dumps() estableciendo reading como argumento. De esta manera: data = marshal.dumps(reading). Utiliza la variable data con la función predefinida display() para ver los datos serializados de la variable.

Sal de la estación y dirígete hacia la marca X dorada, usa la función open() para abrir la puerta y acceder a la oficina. Camina hacia la marca X luminosa frente al terminal, y deserializa los datos que acabas de serializar. Crea una variable llamada output y almacena el valor de marshal.loads() usando la variable data anterior como argumento. Utiliza la función write() y añade output como argumento para acceder a los datos serializados que recolectaste de la estación de monitoreo.

Camina hacia la marca X luminosa sobre la alfombra azul en la oficina; en el terminal verificaremos los protocolos para determinar qué tipo de serialización utilizará el módulo pickle al procesar los datos. En la función predefinida write(), establece los argumentos como pickle.DEFAULT_PROTOCOL y pickle.HIGHEST_PROTOCOL. Esto verificará cuál es el protocolo de serialización actual, así como el protocolo de serialización más reciente disponible en este momento.

Continúa hacia la marca X oscura sobre la alfombra azul; ahora que hemos confirmado los protocolos, podemos verificar los datos almacenados. Los datos han sido recolectados y almacenados a lo largo de los meses en una constante llamada samples. Crea tres variables llamadas: sereal_0, sereal_2 y sereal_5; usaremos estas para verificar tres de los protocolos disponibles para la serialización. El protocolo 0 es ASCII legible, no muy eficiente; el protocolo 2 es un formato binario más eficiente; y el protocolo 5 es el más reciente, con las características más complejas añadidas.

Almacenaremos el valor de pickle.dumps() y estableceremos como argumentos la constante samples y el protocol correspondiente al número en el nombre de la variable. Por ejemplo, para sereal_0 estableceremos el protocol como 0, de la siguiente manera: sereal_0 = pickle.dumps(samples, protocol=0). Utiliza sereal_0, sereal_2 y sereal_5 con la función predefinida display() para verificar lo diferente que es la serialización para cada protocolo.

Camina hacia la marca X luminosa sobre la alfombra roja y mira hacia el terminal, sobrescribe la variable output y almacena el valor de pickle.loads() estableciendo como argumento sereal_5 para deserializar los datos de muestra recolectados hasta ahora. Utiliza la función display() e incluye la función pprint() con la variable output para visualizar los datos. Así: await player.display(pprint(output)). Anota las calificaciones de cada mes mostradas en el terminal para que puedas graficarlas más tarde.

Camina hacia la marca X oscura sobre la alfombra roja y enfréntate al escritorio, en la función predefinida write(), añade las calificaciones que anotaste para cada mes, las cuales fueron mostradas anteriormente en el terminal. Agrégalas como cadenas de texto entre comillas "" en el orden correcto, tal como se indican en la función, para completar el nivel.

Libro de Código