Eu tenho um script de linha de comando que corro com muitos argumentos. Agora cheguei a um ponto em que tenho muitos argumentos e também quero ter alguns argumentos na forma de dicionário.
Portanto, para simplificar, gostaria de executar o script com um arquivo de configurações. Realmente não sei quais bibliotecas usar para a análise do arquivo. Qual é a melhor prática para fazer isso? É claro que eu poderia elaborar algo, mas se houver alguma biblioteca para isso, sou todo ouvidos.
Algumas 'demandas':
- Em vez de usar
pickle
, gostaria que fosse um arquivo de texto direto que possa ser facilmente lido e editado. - Eu quero poder adicionar dados semelhantes a dicionários, ou seja, alguma forma de aninhamento deve ser suportada.
Um arquivo de pseudo exemplo simplificado:
truck:
color: blue
brand: ford
city: new york
cabriolet:
color: black
engine:
cylinders: 8
placement: mid
doors: 2
Respostas:
Você pode ter um módulo Python comum, digamos config.py, assim:
e use-o assim:
fonte
.py
arquivos são executáveis; portanto, qualquer tipo de código pode ser executado ao tentar carregar a configuraçãoimport
. Isso é inaceitável do ponto de vista de segurança.ast.literal_eval
? docs.python.org/3/library/ast.html#ast.literal_evalA configuração de amostra que você forneceu é realmente YAML válido . De fato, o YAML atende a todas as suas demandas, é implementado em um grande número de idiomas e é extremamente amigável ao ser humano. Eu recomendo que você o use. O projeto PyYAML fornece um bom módulo python, que implementa o YAML.
Para usar o módulo yaml é extremamente simples:
fonte
pip3 install pyyaml
para prepará-lo para a importação em scripts python.Achei o mais útil e fácil de usar https://wiki.python.org/moin/ConfigParserExamples
Você acabou de criar um "myfile.ini" como:
E recupere os dados como:
fonte
Yaml e Json são os formatos de arquivo mais simples e mais usados para armazenar as configurações / configurações. PyYaml pode ser usado para analisar yaml. Json já faz parte do python da 2.5. Yaml é um superconjunto de Json. O Json resolverá a maioria dos casos de uso, exceto cadeias de linhas múltiplas, nas quais é necessário escapar. Yaml também cuida desses casos.
fonte