Introdução
No desenvolvimento de software moderno, os dados são frequentemente armazenados e transportados em formatos padronizados. JSON (JavaScript Object Notation) e YAML (YAML Ain't Markup Language) são dois dos formatos mais populares para tudo, desde respostas de APIs web até arquivos de configuração de aplicações.
Neste laboratório, você aprenderá as habilidades essenciais para trabalhar com esses formatos em Python. Você começará usando o módulo nativo json do Python para ler e escrever dados JSON. Em seguida, explorará o YAML como uma alternativa mais legível para humanos e aprenderá a analisá-lo usando a biblioteca ruamel.yaml. Por fim, você descobrirá a biblioteca anyconfig, uma ferramenta poderosa que simplifica o gerenciamento de configurações, permitindo carregar dados de vários formatos de arquivo sem se preocupar com a implementação subjacente.
Trabalhando com JSON
Nesta etapa, você aprenderá a serializar e desserializar dados JSON. JSON significa JavaScript Object Notation e é um formato leve para armazenar e transportar dados. É comumente usado quando dados são enviados de um servidor para uma página web.
Nota: Se você não está familiarizado com o uso do WebIDE (semelhante ao VS Code), aprenda primeiro neste laboratório.
Primeiro, vamos escrever um dicionário Python em um arquivo JSON. Esse processo é chamado de serialização.
No explorador de arquivos à esquerda, abra o arquivo json_handler.py e adicione o seguinte código. Este script criará um novo arquivo chamado output.json.
## Write JSON file: json.dump() writes Python object as JSON
import json
content = {"name": "Joe", "age": 20}
with open("output.json", "w") as f: ## Open file in write mode
json.dump(content, f, indent=2) ## Write JSON with 2-space indentation
Vamos analisar o código:
import json: Importa o módulo JSON nativo do Python.content = {"name": "Joe", "age": 20}: Define um dicionário Python que queremos salvar.with open("output.json", "w") as f:: Abre um arquivo chamadooutput.jsonno modo de escrita ("w").json.dump(content, f, indent=2): Escreve o dicionáriocontentno arquivofem formato JSON. O argumentoindent=2formata o JSON com uma indentação de 2 espaços, tornando-o mais legível.
Agora, execute o script no terminal para criar o arquivo:
python3 json_handler.py
Você não verá nenhuma saída, mas um novo arquivo output.json foi criado. Você pode visualizar seu conteúdo com o comando cat:
cat output.json
Você deverá ver o conteúdo JSON formatado:
{
"name": "Joe",
"age": 20
}
Em seguida, vamos ler um arquivo JSON para um objeto Python. Esse processo é chamado de desserialização. Leremos o arquivo data.json que foi preparado para você.
Modifique o arquivo json_handler.py com o seguinte código:
## Read JSON file: json.load() parses JSON from file object
import json
with open("data.json", "r") as f: ## Open file in read mode
content = json.load(f) ## Parse JSON and return Python dict/list
print(content)
Aqui está o que o novo código faz:
with open("data.json", "r") as f:: Abre o arquivodata.jsonexistente no modo de leitura ("r").content = json.load(f): Analisa os dados JSON do arquivo e os converte em um dicionário Python.print(content): Imprime o dicionário resultante no console.
Execute o script novamente:
python3 json_handler.py
Desta vez, você verá o dicionário Python impresso no terminal:
{'username': 'labex', 'id': 12345}
Manipulando YAML
Nesta etapa, você explorará o YAML, um formato de serialização de dados projetado para ser legível por humanos. Comparado ao JSON, o YAML é frequentemente mais fácil de manter manualmente e permite comentários, tornando-o uma escolha popular para arquivos de configuração.
O Python não possui um analisador YAML nativo, então você precisa instalar uma biblioteca de terceiros. Duas bibliotecas principais estão disponíveis: PyYaml e ruamel.yaml. A biblioteca ruamel.yaml é mais compatível com a especificação YAML e é melhor em preservar comentários e formatação ao modificar arquivos. Nós a usaremos neste laboratório.
Primeiro, instale o ruamel.yaml usando o pip:
pip install ruamel.yaml
Você verá uma saída indicando que a instalação foi bem-sucedida.
Agora, vamos usar esta biblioteca para ler o arquivo config.yaml. Abra o arquivo yaml_handler.py no editor e adicione o seguinte código:
## Read YAML file using ruamel.yaml library
from ruamel.yaml import YAML
with open("config.yaml") as f:
yaml=YAML() ## Create YAML parser instance
data = yaml.load(f) ## Parse YAML and return Python dict/list
print(data)
Vamos revisar o código:
from ruamel.yaml import YAML: Importa a classeYAMLnecessária da biblioteca.with open("config.yaml") as f:: Abre o arquivoconfig.yamlpara leitura.yaml=YAML(): Cria uma instância do analisador YAML.data = yaml.load(f): Analisa o conteúdo YAML do arquivo e o converte em um objeto Python (neste caso, um dicionário).print(data): Imprime os dados carregados.
Execute o script a partir do terminal:
python3 yaml_handler.py
A saída será a representação em dicionário Python do conteúdo do arquivo YAML:
{'user': {'name': 'Alex', 'email': 'alex@example.com'}}
Usando Anyconfig
Nesta etapa, você descobrirá o pacote anyconfig, uma biblioteca muito útil que abstrai o formato do arquivo de configuração subjacente. Ele permite carregar um dicionário Python a partir de vários formatos, como JSON, YAML, TOML e outros, usando uma única função simples. Isso é extremamente útil quando sua aplicação precisa suportar múltiplos formatos de configuração.
Primeiro, você precisa instalar o anyconfig. Como o anyconfig precisa de um backend para analisar YAML, e nós já instalamos o ruamel.yaml, ele o usará automaticamente.
Instale o anyconfig usando o pip:
pip install anyconfig
Após a conclusão da instalação, você pode usar o anyconfig para carregar arquivos de configuração. Vamos usá-lo para carregar o mesmo arquivo config.yaml da etapa anterior.
Abra o arquivo anyconfig_handler.py e adicione o seguinte código:
## anyconfig: load configuration files in various formats (JSON, YAML, TOML, etc.)
import anyconfig
## anyconfig.load() auto-detects the file format based on the extension.
conf = anyconfig.load("/home/labex/project/config.yaml")
print(conf)
Este código é muito mais simples:
import anyconfig: Importa a biblioteca.anyconfig.load(...): Esta única função abre, lê e analisa o arquivo. Ela detecta automaticamente queconfig.yamlé um arquivo YAML e usa o analisador apropriado. Observe que estamos usando um caminho absoluto aqui, o que é uma boa prática quando a localização do script pode variar.
Agora, execute o script:
python3 anyconfig_handler.py
Como este exemplo ainda carrega o config.yaml, a saída é idêntica à da etapa anterior, mas o código necessário é mais conciso e flexível.
{'user': {'name': 'Alex', 'email': 'alex@example.com'}}
Com o anyconfig, você também pode substituir "config.yaml" por "data.json" e executar o script novamente. O código continuará funcionando sem nenhuma outra alteração, mas o dicionário impresso refletirá o conteúdo de data.json em vez do arquivo YAML.
Resumo
Neste laboratório, você aprendeu como manipular dois formatos comuns de serialização de dados em Python: JSON e YAML. Essas habilidades são fundamentais para tarefas como trabalhar com APIs web, gerenciar configurações de aplicações e intercâmbio de dados.
Você começou com o módulo nativo json do Python, usando json.dump() para serializar um dicionário Python em um arquivo JSON e json.load() para desserializar um arquivo JSON de volta para um objeto Python.
Em seguida, você explorou o YAML como uma alternativa legível para humanos ao JSON. Você aprendeu como instalar a biblioteca ruamel.yaml e usá-la para analisar um arquivo YAML.
Por fim, você foi apresentado à biblioteca anyconfig, uma ferramenta poderosa que simplifica o gerenciamento de configurações. Você viu como sua função anyconfig.load() pode ler dados de diferentes formatos de arquivo sem exigir código específico para cada formato, tornando suas aplicações mais flexíveis e fáceis de manter.



