Coding for KidsCoding for Kids
Níveis CriativosDesafiosGuia do Professor
Votar em funcionalidades
Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível

Módulos de serialização
Módulos Marshal e Pickle

Objetivo

Vá até a estação de serviço e certifique-se de que os dados estão devidamente armazenados usando o módulo JSON para formatar os arquivos.

Continuando pelo caminho, encontramos algumas estações monitorando a distribuição de água e a qualidade do solo para a terra que está sendo desenvolvida para uma futura colheita. Para processar os dados, é eficiente serializar os dados. Embora o uso do Json possa ser eficaz como uma solução generalizada, também existem alguns métodos de serialização específicos do Python, sendo eles os módulos Marshal e Pickle. O módulo Marshal foi projetado para serialização/deserialização rápida, convertendo os dados em binário, ideal para transferências de dados mais simples. O módulo Pickle é mais lento, mas foi projetado para processar estruturas de dados mais complexas e é muito mais flexível, ideal para estruturas de dados maiores ou de prioridade.

Para usar os módulos Marshal e Pickle, importe suas funções escrevendo: import marshal e import pickle. Para nossos propósitos, usaremos as seguintes funções:

  • marshal.dumps(): Serializa os dados em um formato binário, projetado para velocidade dentro do Python. Recebe um argumento, que é o dado que você deseja serializar, sendo limitado a tipos de dados básicos.
  • marshal.loads(): Desserializa os dados binários em tipos de dados legíveis pelo Python, limitado em suas capacidades, mas com execução rápida. Recebe um argumento, que é o dado a ser desserializado.
  • pickle.DEFAULT_PROTOCOL: Verifica qual versão do protocolo para serialização Pickle é padrão na sua versão do Python. Os protocolos afetam como os dados são serializados.
  • pickle.HIGHEST_PROTOCOL: Verifica qual versão do protocolo para serialização Pickle é a mais alta disponível na sua versão do Python. Os protocolos afetam como os dados são serializados.
  • pickle.dumps(): Serializa estruturas de dados complexas do Python em formato binário de acordo com o protocolo usado. Recebe dois argumentos, os dados que você deseja serializar e a versão do protocolo que você deseja usar ao serializar.
  • pickle.loads(): Desserializa dados binários em tipos de dados legíveis pelo Python, robusto para objetos do Python. Recebe um argumento, que é o dado que você deseja desserializar.

Além desses módulos e funções, também utilizaremos um módulo de formatação chamado pprint, que importaremos usando from pprint import pprint. Isso nos permite usar a função pprint() que pode ser utilizada para formatar estruturas de dados como dicionários, permitindo-nos exibir as informações de forma clara.

Para começar, dirija-se ao X marcado com luz dentro da pequena estação de monitoramento e encare o terminal de computador. A estação monitora a pressão da água e as condições do solo do terreno próximo que está sendo desenvolvido para o plantio de culturas. Existe uma constante chamada reading, que contém os dados Python coletados pela estação.

Crie uma variável chamada data e armazene o valor da função marshal.dumps() definindo reading como argumento. Assim: data = marshal.dumps(reading). Use a variável data com a função pré-escrita display() para visualizar os dados da variável serializada.

Saia da estação e dirija-se ao X dourado marcado, use a função open() para abrir a porta e acessar o escritório. Caminhe até o X marcado com luz em frente ao terminal e desserialize os dados que você acabou de serializar. Crie uma variável chamada output e armazene o valor de marshal.loads() com a variável data anterior como argumento. Use a função write() e adicione output como argumento para acessar os dados serializados que você coletou da estação de monitoramento.

Dirija-se ao X marcado com luz sobre o tapete azul no escritório; no terminal, vamos verificar os protocolos para determinar que tipo de serialização o módulo pickle usará ao processar os dados. Na função pré-escrita write(), defina os argumentos como pickle.DEFAULT_PROTOCOL e pickle.HIGHEST_PROTOCOL. Isso verificará qual o protocolo de serialização atual, bem como o protocolo de serialização mais recente disponível no momento.

Avance até o X marcado com escuridão sobre o tapete azul; agora que confirmamos os protocolos, podemos verificar os dados armazenados. Os dados foram coletados e armazenados ao longo dos meses em uma constante chamada samples. Crie três variáveis chamadas: sereal_0, sereal_2 e sereal_5; usaremos essas variáveis para verificar três dos protocolos disponíveis para serialização. O Protocolo 0 é ASCII legível, não muito eficiente; o Protocolo 2 é um formato binário mais eficiente; e o Protocolo 5 é o mais recente, com os recursos mais complexos adicionados.

Armazenaremos o valor de pickle.dumps() e definiremos como argumentos a constante sample e o protocolo correspondente ao número presente no nome da variável. Por exemplo, para sereal_0 definiremos o protocolo como 0, assim: sereal_0 = pickle.dumps(samples, protocol=0). Use as variáveis sereal_0, sereal_2 e sereal_5 com a função pré-escrita display() para verificar como a serialização difere para cada protocolo.

Dirija-se ao X marcado com luz sobre o tapete vermelho e encare o terminal, sobrescreva a variável output e armazene o valor de pickle.loads() definindo o argumento para sereal_5, a fim de desserializar os dados de amostra que foram coletados até agora. Use a função display() e adicione a função pprint() com a variável output para visualizar os dados. Assim: await player.display(pprint(output)). Anote as avaliações de cada mês exibidas no terminal para que você possa registrá-las mais tarde.

Dirija-se ao X marcado com escuridão sobre o tapete vermelho e encare a mesa; na função pré-escrita write(), adicione as avaliações que você anotou para cada mês, que foram previamente exibidas no terminal. Adicione-as como strings entre aspas duplas (""), na ordem correta conforme definido na função, para completar o nível.

Livro de Código