Leer ficheros de configuracion en Python

The site directory migrate module is currently enabled, unless you are doing the migration right now, there's no reason to leave it enabled.

Hace tiempo que busco la mejor manera que una aplicacion lea su fichero de configuracion y ejecute las acciones correspondientes.

La primera parte del problema se puede solucionar usando un formato en el fichero de configuracion que sea compatible con el modulo ConfigParser.
Basicamente se trata de usar :

[Seccion]
campo1: valor1
campo2: valor2

Tambien se admite:

campo1= valor1

Para leer el fichero:

import ConfigParser
config = ConfigParser.ConfigParser()
config.read(['ejemp.conf'])
for opt,value in config.items('Seccion'):
    print opt,value

Ahora necesitamos relaccionar estos valores con acciones, la solucion simple es usar un bucle y un bloque de condicionales pero el codigo se puede hacer enorme y poco legible. Para solucionar esto he optado por usar diccionarios.

Basandonos en el anterior fichero de configuracion, supongamos que para cada campo se ha de ejecutar una funcion pasandole en valor del campo como parametro.

Las funciones serian:

def func1(value):
	print value

def func2(value)
	print value*2

El diccionario que relacciona las funciones y los valores son:

dict={'campo1':func1,'campo2':func2}

Y finalmente:

try:
	for opt,value in config.items('Seccion'):
		dict[opt](value)
except KeyError:
	print 'Valores incorrectos:',opt,value

Partiendo de esta base se pueden tomar rapidamente decisiones complejas basandonos en un fichero de configuracion y el codigo queda bastante compacto.

¿Alguien conoce una manera mas eficiente de hacerlo?

parseando confs

Seguramente la manera más cómoda, flexible y eficaz sea usar flex y yacc, los generadores de analizadores léxico y sintáctico para el lenguaje C.
Si solo te interesa que el fichero sigue un formato prefijado te basta solo con flex, si quieres también que el fichero siga una determinada gramática, operar con las variables, etc, necesitaras yacc. En python, en la asignatura II26 (Procesadores del lenguaje) se usa una herramienta llamada metacomp que está escrita en python e implementa la generación de analizadores léxico, sintáctico y semántico.. pero esto solo te hará falta si quieres crear de tu fichero un nuevo lenguaje de programación :P

Para ejemplos sencillos a lo mejor te basta con ConfigParser, pero si quieres tener más control sobre lo que parseas o usar formatos más complejos necesitaras usar un analizador léxico/[sintáctico].