Como ler e escrever arquivos Toml usando Python

Como ler e escrever arquivos Toml usando Python
Toml, abreviação de "Tom's Obbty Minimal Language", é um formato de arquivo relativamente novo e popular que se concentra na semântica mínima para escrever arquivos de configuração. O formato de arquivo foi criado por Tom Preston-Werner, o ex-CEO do GitHub. Na época em que este artigo foi escrito, o primeiro candidato de lançamento da versão 1.0.0 foi marcado, então a especificação é mais ou menos finalizada. Este artigo fornecerá uma breve introdução ao formato do arquivo Toml e descreverá como esse formato de arquivo pode ser usado em aplicativos e scripts Python.

Exemplo de arquivo de configuração do toml

A especificação para Toml inclui o uso de pares de valor-chave sensíveis à caixa. As chaves estão do lado esquerdo, enquanto os valores serão do lado direito; Estes termos são separados em ambos os lados por um sinal igual. Os pares de valor-chave são idênticos à sintaxe da declaração variável que você verá na maioria das linguagens de programação. Você também pode definir tabelas e subtáveis ​​(seções e subseções) em colchetes para manter os pares de valores-chave organizados para melhorar a lógica de análise e a aplicação em seus programas. Os valores podem ser de tipos de corda, número inteiro, flutuante, booleano, matriz e hora e data. Toml permite o uso da sintaxe do ponto para que você possa definir uma tabela (seção) como “Tabela.subtable "ou uma chave como" chave.identificador ”também. A extensão de arquivo usada para um arquivo TOML é .Toml. Abaixo está um exemplo abreviado de um arquivo TOML:

Nome = "PC Game"
[padrão]
perfil_name = "perfil"
Player_name = "Player"
perfil_created = 1979-05-27T07: 32: 00-08: 00
som = true
[do utilizador]
[do utilizador.perfil]
name = "perfil1"
Player_name = "Player1"
class = "Warrior"
[do utilizador.configurações]
som = falso
[Default_inventory]
guerreiro = [["espada", "escudo"], ["armadura de placa", "leme de placa"]]]
mago = [["Staff", "Wand"], ["Robe", "Hood"]]]
itens = [
"Poção de saúde",
"antídoto",
"Poção de mana"
]

Para referência, o mesmo arquivo de configuração é escrito no JSON abaixo:


"Nome": "PC Game",
"padrão":
"perfil_name": "perfil",
"Player_name": "Player",
"Profile_created": "1979-05-27T15: 32: 00.000Z ",
"Som": verdadeiro
,
"do utilizador":
"perfil":
"Nome": "perfil1",
"Player_name": "Player1",
"Classe": "Warrior"
,
"configurações":
"Som": falso

,
"Default_inventory":
"guerreiro": [
[[
"espada",
"escudo"
],
[[
"Armadura de placa",
"Plate Helm"
]
],
"mago": [
[[
"funcionários",
"varinha"
],
[[
"Robe",
"capuz"
]
],
"Unid": [
"Poção de saúde",
"antídoto",
"Poção de mana"
]

Diferenças entre os formatos de arquivo JSON e INI

Toml é semelhante aos formatos JSON e INI de várias maneiras, com algumas diferenças que podem determinar qual formato de arquivo você deseja usar. O formato do arquivo Toml enfatiza a legibilidade humana e parece muito mais limpo para ler. Os arquivos INI não suportam seções aninhadas e pares de valor-chave aninhados. Ao contrário de JSON, Toml permite comentários (com o símbolo #). Dados longos aninhados em um arquivo JSON podem ser escritos em Toml em apenas algumas linhas.

No entanto, pode ser confuso identificar adequadamente a estrutura em longas hierarquias aninhadas em Toml, enquanto em Json a estrutura é muito mais clara, mesmo que os dados aninhados possam parecer detalhados. Toml é projetado principalmente para arquivos de configuração e não para grandes conjuntos de dados estruturados, enquanto o JSON é adequado para qualquer escala de dados estruturados.

O módulo Python Toml

Atualmente, as bibliotecas padrão do Python não têm suporte para analisar dados do TOML, no momento da redação deste artigo. Isso pode mudar após o toml versão 1.0.0 é liberado. Por enquanto, você terá que usar um módulo Python de terceiros chamado Toml. Você pode instalar este módulo no Ubuntu usando um dos comandos abaixo:

$ sudo apt install python3-toml
$ PIP3 Instale o toml

Analisando um arquivo TOML usando o módulo Python Toml

Analisar um arquivo TOML usando o módulo Python3-Toml é bastante direto. Você pode usar o “toml.Método carregar ”para analisar o arquivo inteiro, ou você pode usar o“ toml.Método carrega ”para analisar qualquer par específico de valor de chave TOML. Assumindo um “dados.O arquivo toml ”contém as cordas formatadas TOML mencionadas no exemplo acima, o código abaixo analisará e imprimirá os dados do Toml como um dicionário Python:

#!/usr/bin/Env Python3
importar toml
Imprimir (Toml.Carregar dados.toml "))

A execução do código acima produzirá a seguinte saída:

'Nome': 'PC Game', 'Default': 'perfil_name': 'perfil', 'player_name': 'player',
'Profile_created': DateTime.DateTime (1979, 5, 27, 7, 32, tzinfo =Objeto em 0x7f3506b3d850>), 'som': true, 'user': 'perfil': 'name': 'perfil1',
'Player_name': 'Player1', 'Class': 'Warrior', 'Configurações': 'Sound': false,
'Default_inventory': 'Warrior': [['Sword', 'Shield'], ['Armadura de placa', 'Plate Helm']],
'Mage': [['Staff', 'Wand'], ['Robe', 'Hood']], 'itens': ['Poção de Saúde', 'Antídoto',
'Mana Poção']

Agora que você tem um objeto de dicionário Python, você pode implementar qualquer lógica em seu programa para lidar com os dados do dicionário.

Despejando um dicionário python como dados formatados com Toml

Um dicionário Python pode ser despejado em cordas formatadas com o “toml.Método de despejos ", ou o objeto pode ser despejado em um arquivo usando“ Toml.Método do despejo ”. O exemplo abaixo converterá um objeto de dicionário Nito Toml Formatted Strings:

#!/usr/bin/Env Python3
importar toml
dados = toml.Carregar dados.toml ")
Imprimir (Toml.despejos (dados))

A execução do código acima produzirá a seguinte saída:

Nome = "PC Game"
[padrão]
perfil_name = "perfil"
Player_name = "Player"
perfil_created = 1979-05-27T07: 32: 00-08: 00
som = true
[Default_inventory]
guerreiro = [["espada", "escudo",], ["armadura de placa", "leme de placa",],]
mago = [["Staff", "Wand",], ["Robe", "Hood",,]
Itens = ["Poção de Saúde", "Antídoto", "Mana Poção",]
[do utilizador.perfil]
name = "perfil1"
Player_name = "Player1"
class = "Warrior"
[do utilizador.configurações]
som = falso

Para converter um objeto de dicionário em uma corda formatada com Toml e armazená -lo em um arquivo, você pode usar o “toml.Dump (Dictionary_Object, Output_File) ”Método.

Conclusão

Um arquivo TOML em termos mais simples é apenas um arquivo de configuração da INI com melhor estrutura e sintaxe, facilitando a análise mais fácil e melhor legibilidade. O formato do arquivo TOML é frequentemente comparado com o formato de arquivo JSON, mas, além de seu uso em arquivos de configuração, Toml não possui muita utilidade. JSON, por outro lado, é muito mais versátil e pode ser usado em diferentes casos de uso que exigem qualquer tipo de estrutura de dados.