Qué es Gulcas?
La lista de correo
Normas de uso
Fotos
Wiki
Hackit
Leer ficheros de configuracion en Python
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?
- arrase's blog
- Inicie sesión o regístrese para enviar comentarios


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].