python - examples - seaborn
¿Cuál es la mejor práctica al usar un archivo de configuración en Python? (4)
Tengo un script de línea de comandos que ejecuto con muchos argumentos. Ahora he llegado a un punto en el que tengo demasiados argumentos, y también quiero tener algunos argumentos en forma de diccionario.
Así que para simplificar las cosas, me gustaría ejecutar el script con un archivo de configuración. Realmente no sé qué bibliotecas usar para analizar el archivo. ¿Cuál es la mejor práctica para hacer esto? Por supuesto, yo podría forjar algo, pero si hay alguna biblioteca para esto, soy todo oídos.
Unas ''demandas'':
- En lugar de utilizar
pickle
me gustaría que fuera un archivo de texto sencillo que se pueda leer y editar fácilmente. - Quiero poder agregar datos similares a diccionarios, es decir, se debe admitir algún tipo de anidamiento.
Un archivo de ejemplo pseudo simplificado:
truck:
color: blue
brand: ford
city: new york
cabriolet:
color: black
engine:
cylinders: 8
placement: mid
doors: 2
Encontré que este es el https://wiki.python.org/moin/ConfigParserExamples más útil y fácil de usar
Solo creas un "myfile.ini" como:
[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True
[SectionTwo]
FavoriteColor=Green
[SectionThree]
FamilyName: Johnson
[Others]
Route: 66
Y recuperar los datos como:
>>> import ConfigParser
>>> Config = ConfigParser.ConfigParser()
>>> Config
<ConfigParser.ConfigParser instance at 0x00BA9B20>
>>> Config.read("myfile.ini")
[''c://tomorrow.ini'']
>>> Config.sections()
[''Others'', ''SectionThree'', ''SectionOne'', ''SectionTwo'']
>>> Config.options(''SectionOne'')
[''Status'', ''Name'', ''Value'', ''Age'', ''Single'']
>>> Config.get(''SectionOne'', ''Status'')
''Single''
La configuración de muestra que proporcionaste es realmente válida YAML . De hecho, YAML satisface todas sus demandas, se implementa en una gran cantidad de idiomas y es extremadamente amigable para los humanos. Recomiendo encarecidamente que lo uses. El proyecto PyYAML proporciona un módulo agradable de python, que implementa YAML.
Usar el módulo yaml es extremadamente simple:
import yaml
config = yaml.safe_load(open("path/to/config.yml"))
Puedes tener un módulo regular de Python, digamos config.py, como este:
truck = dict(
color = ''blue'',
brand = ''ford'',
)
city = ''new york''
cabriolet = dict(
color = ''black'',
engine = dict(
cylinders = 8,
placement = ''mid'',
),
doors = 2,
)
y úsalo así:
import config
print config.truck[''color'']
Yaml y Json son los formatos de archivo más simples y más utilizados para almacenar configuraciones / configuración. PyYaml se puede utilizar para analizar yaml. Json ya es parte de python desde 2.5. Yaml es un superconjunto de Json. Json resolverá la mayoría de los casos de uso, excepto las cadenas de líneas múltiples donde se requiere escapar. Yaml también se encarga de estos casos.
>>> import json
>>> config = {''handler'' : ''adminhandler.py'', ''timeoutsec'' : 5 }
>>> json.dump(config, open(''/tmp/config.json'', ''w''))
>>> json.load(open(''/tmp/config.json''))
{u''handler'': u''adminhandler.py'', u''timeoutsec'': 5}