Python:
Trabalhando com YAML
Como fazer:
Ler e escrever em YAML com Python normalmente envolve o uso de uma biblioteca de terceiros, sendo a PyYAML
a mais popular. Para começar, você precisará instalar o PyYAML executando pip install PyYAML
.
Exemplo: Escrevendo em um Arquivo YAML
import yaml
data = {'uma lista': [1, 42, 3.141, 1337, 'ajuda', u'€'],
'uma string': 'boo!',
'outro dicionário': {'foo': 'bar', 'chave': 'valor', 'a resposta': 42}}
with open('exemplo.yaml', 'w') as f:
yaml.dump(data, f, default_flow_style=False)
# Isso cria `exemplo.yaml` com os dados estruturados no formato YAML.
Exemplo: Lendo de um Arquivo YAML
import yaml
with open('exemplo.yaml', 'r') as f:
dados_carregados = yaml.safe_load(f)
print(dados_carregados)
# Saída:
# {'uma lista': [1, 42, 3.141, 1337, 'ajuda', '€'],
# 'uma string': 'boo!',
# 'outro dicionário': {'foo': 'bar', 'chave': 'valor', 'a resposta': 42}}
Usando YAML para Configuração
Muitos programadores usam YAML para gerenciar configurações de aplicativos. Aqui está um exemplo de como alguém pode estruturar um arquivo de configuração e lê-lo:
config.yaml:
database:
host: localhost
port: 5432
username: admin
password: secreto
Lendo o arquivo de configuração em Python:
import yaml
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
print(config['database']['host']) # Saída: localhost
Tratando Estruturas Complexas
Para estruturas complexas, PyYAML permite que você defina objetos Python personalizados. No entanto, assegure práticas seguras usando safe_load
para evitar a execução de funções ou objetos arbitrários.
import yaml
# Definir um objeto Python
class Exemplo:
def __init__(self, valor):
self.valor = valor
# Construtor personalizado
def construtor_exemplo(loader, node):
valor = loader.construct_scalar(node)
return Exemplo(valor)
# Adicionar construtor para a tag "!example"
yaml.add_constructor('!example', construtor_exemplo)
yaml_str = "!example 'dados'"
carregado = yaml.load(yaml_str, Loader=yaml.FullLoader)
print(carregado.valor) # Saída: dados
Neste trecho, !example
é uma tag personalizada usada para instanciar um objeto Exemplo
com o valor ‘dados’ de uma string YAML. Carregadores personalizados como este expandem a flexibilidade do PyYAML, permitindo o processamento de estruturas e tipos de dados mais complexos.