Como serializar e desserializar dados em Python

Python tem várias maneiras de serializar / desserializar dados. Neste tutorial, veremos o módulo marechal e o módulo cpickle. Antes de ver como serializar em Python, vamos explicar brevemente esse conceito. A serialização é um processo amplamente utilizado para salvar objetos em um arquivo ou banco de dados ou para enviá-los pela rede.

É hora de começar com o tutorial, veremos um exemplo com cada módulo.

1. Módulo marechal


Antes de começar, você deve saber que este módulo não garante a compatibilidade entre as diferentes versões do compilador Python.

Exemplo 1
Vamos ver o primeiro exemplo muito simples:

 import marshal data = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Deserialized:", objectLoad)
Como primeiro passo, importamos a biblioteca marshal, criamos uma lista que iremos serializar, então a pintamos e desserializamos. A função lixões cuida da serialização e da função cargas para desserializar (ambos recebem o objeto com o qual travar). Muito fácil como você viu. Aqui está uma captura de tela de sua execução:

E aqui concluímos com o primeiro exemplo.

Exemplo 2
Neste exemplo, vamos gravar um objeto em um arquivo.

 import marshal data = [1, 2, 3, 4] fileOut = open ("file.dat", "bw") marshal.dump (data, fileOut) fileOut.close () fileIn = open ("file.dat", "br") dataLoad = marshal.load (fileIn) print ("Deserialized:", dataLoad) fileIn.close () 
A importação e a lista são mantidas, só que agora vamos usar os arquivos, abrimos um arquivo para escrever, o b é para bytes, e nós descartamos a lista (agora a função é jogar fora e recebe os dados para escrever e o arquivo), quando terminamos fechamos. Para terminar, abrimos o mesmo arquivo em modo de leitura e lemos a partir dele (note que a função é carga, e que recebe o arquivo como parâmetro), para finalizar fechamos o arquivo.

Se olharmos para o arquivo arquivo.dat, veremos o seguinte:

A rede não é muito mais difícil, basta lembrar a pequena limitação de compatibilidade entre as versões do Python. Vamos passar para o outro módulo.

2. Módulo Cpickle


Este módulo é escrito em C, existe outro chamado pickle que é desenvolvido em Python, mas é mais lento, por isso é aconselhável usar cpickle. Ao contrário do marshal, este módulo vai garantir a compatibilidade entre as versões do Python, portanto, antes de programar, devemos levar essas coisas em consideração.

ObservaçãoNo Python 3 cPickle foi renomeado para _pickle e é usado automaticamente pelo módulo pickle.

Para este módulo vamos ver um exemplo, em que usamos sockets, vamos ver o código do servidor, é apenas sobre como faríamos a serialização ou desserialização, por isso não inclui tratamento de erros e um uma única mensagem é usada.

 import socket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Dados recebido: ", dados) print (" Deserializado: ", pickle.loads (dados)) s.close ()
Vemos que tudo funciona como com soquetes normais, só que os dados recebidos chegarão serializados, então deserializamos com a função cargas, como você pode ver, ele é chamado da mesma forma que no módulo marshal. Finalmente veremos o cliente:
 import socket import pickle s = socket.socket () data = [1, 2, 3, 4] objectBytes = pickle.dumps (data) s.connect (("localhost", 2016)) s.send (objectBytes) s. perto ()
Não tem nenhuma complicação maior, serializamos o objeto com lixões e enviamos para o soquete criado. Abaixo, deixo a saída do servidor quando um cliente se conecta, a saída do cliente é ignorada, pois não mostra nada.

Até agora vem o tutorial sobre serialização e desserialização de dados em Python, como sabemos que essa linguagem torna as coisas muito mais fáceis para nós.

ObservaçãoO tutorial usa a versão de Python 3.5.

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave