¿Cuál es la mejor práctica al usar un archivo de configuración en Python?

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 

Puedes tener un módulo regular de Python, por ejemplo, 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'] 

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 buen módulo de Python, que implementa YAML.

Usar el módulo yaml es extremadamente simple:

 import yaml config = yaml.safe_load(open("path/to/config.yml")) 

He encontrado 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  >>> 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' 

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}