8.1 O que é serialização
Depois de aprender a trabalhar com arquivos, salvar e ler dados, chegou a hora de aprender a trabalhar com arquivos a sério. Hoje vamos começar a estudar serialização.
Serialização é o processo de transformar um objeto em uma sequência de bytes ou em um formato que pode ser salvo em um arquivo, transmitido pela rede ou armazenado em um banco de dados. Deserialização é o processo inverso, onde essa sequência de bytes é transformada de volta no objeto original.
Para salvar um objeto em um arquivo (ou transmiti-lo pela rede), é necessário transformá-lo em uma string (ou conjunto de bytes), que seja fácil de escrever em um arquivo (e ler do arquivo) ou transmitir pela rede.
Aqui estão 4 principais áreas onde a serialização é usada:
- Salvar estado de objetos: Para guardar o estado de um objeto entre execuções do programa.
- Transferência de dados: Para transmitir objetos através da rede entre diferentes componentes de um sistema ou entre diferentes sistemas.
- Cache: Para armazenar objetos no cache para acesso rápido.
- Bancos de dados: Para armazenar estruturas de dados complexas em bancos de dados.
Existem muitas bibliotecas que lidam com serialização, cada uma criada para suas próprias necessidades. Vamos nos familiarizar com cinco delas, e com duas esse conhecimento será bem detalhado.
Vamos dar uma olhada nas mais populares entre elas:
- Módulo
pickle
- Módulo
json
- Módulo
yaml
- Módulo
marshal
- Módulo
shelve
A seguir, um breve resumo de cada um:
8.2 Módulo pickle
pickle
é um módulo embutido para
serialização e deserialização
de objetos Python. Ele permite salvar e restaurar
praticamente qualquer objeto Python, incluindo classes personalizadas.
Exemplo de uso do pickle
:
import pickle
# Exemplo de objeto para serialização
data = {'name': 'Alice', 'age': 30, 'is_student': False}
# Serialização do objeto em arquivo
with open('data.pkl', 'wb') as file:
pickle.dump(data, file)
# Deserialização do objeto do arquivo
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)
print(loaded_data)
8.3 Módulo json
json
é um módulo embutido para trabalhar com JSON
(JavaScript Object Notation). JSON é um formato de texto que
é usado para troca de dados entre cliente e servidor.
Exemplo de uso do json
:
import json
# Exemplo de objeto para serialização
data = {'name': 'Bob', 'age': 25, 'is_student': True}
# Serialização do objeto em string JSON
json_string = json.dumps(data)
print(json_string)
# Serialização do objeto em arquivo JSON
with open('data.json', 'w') as file:
json.dump(data, file)
# Deserialização do objeto da string JSON
loaded_data = json.loads(json_string)
print(loaded_data)
# Deserialização do objeto do arquivo JSON
with open('data.json', 'r') as file:
loaded_data = json.load(file)
print(loaded_data)
8.4 Módulo yaml
yaml
(YAML Ain't Markup Language) é um
formato de serialização de dados legível por humanos. Para trabalhar com YAML em
Python, é usada a biblioteca externa PyYAML.
Exemplo de uso do yaml
:
import yaml
# Exemplo de objeto para serialização
data = {'name': 'Carol', 'age': 27, 'is_student': False}
# Serialização do objeto em string YAML
yaml_string = yaml.dump(data)
print(yaml_string)
# Serialização do objeto em arquivo YAML
with open('data.yaml', 'w') as file:
yaml.dump(data, file)
# Deserialização do objeto da string YAML
loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
print(loaded_data)
# Deserialização do objeto do arquivo YAML
with open('data.yaml', 'r') as file:
loaded_data = yaml.load(file, Loader=yaml.FullLoader)
print(loaded_data)
8.5 Módulo marshal
marshal
é um módulo embutido para a serialização
de objetos Python, que é usado para serializar código Python.
Ele é mais rápido que pickle
, mas suporta menos tipos de objetos e não é tão
flexível.
Exemplo de uso do marshal
:
import marshal
# Exemplo de objeto para serialização
data = {'name': 'Dave', 'age': 35, 'is_student': True}
# Serialização do objeto em arquivo
with open('data.marshal', 'wb') as file:
marshal.dump(data, file)
# Deserialização do objeto do arquivo
with open('data.marshal', 'rb') as file:
loaded_data = marshal.load(file)
print(loaded_data)
8.6 Módulo shelve
shelve
é um módulo embutido que
oferece uma forma simples de salvar objetos Python em arquivos com
armazenamento baseado em chave, semelhante a um dicionário.
Exemplo de uso do shelve
:
import shelve
# Exemplo de objeto para serialização
data = {'name': 'Eve', 'age': 28, 'is_student': False}
# Serialização do objeto em arquivo
with shelve.open('data.shelve') as db:
db['person'] = data
# Deserialização do objeto do arquivo
with shelve.open('data.shelve') as db:
loaded_data = db['person']
print(loaded_data)
E embora os próprios módulos e formatos de armazenamento de dados sejam diferentes, o trabalho com
eles do ponto de vista do programador é muito parecido. A seguir, vamos
analisar mais detalhadamente o trabalho com o módulo pickle
e
módulo json
.
GO TO FULL VERSION