Trabajando con ficheros de configuración en Python: ConfigParser

Posted by in Python

Quizás sea de los priméros módulos de Python que se me ha atravesado un poco. Básicamente, los ficheros de configuración (en Windows sin los clásicos ficheros .ini) son aquellos donde se almacena información que es utilizada por el software de una ejecución a la siguiente. Yo soy de los que siempre he utilizado ficheros INI, y quizás, de las primeras cosas que suelo aprender (programación más avanzada).

Pythoneando en VB6

Recientemente tuve un problema con una librería que solía utilizar en VB6, así que decidí modificarla entera. Inconscientemente estaba utilizando muchas de las técnicas que uso en Python, y lo mejor de todo es que encima había aumentado su funcionalidad (respecto a la versión anterior), y con bastante menos código. Aunque en VB6 no hay listas, estaba usando matrices de cadenas “string()“. Es cierto que si echo en falta algunas características en VB6 de las listas de Python, pero … se puede sobrevivir!!

Cuando repasé el código, me dí cuenta que Python está cambiando mi forma de programar, incluso en Visual Basic 6.

Archivos ini

Utilizar archivos INI supone dos pasos: lectura de datos, y escritura de datos. Normalmente, se usan sentencias del tipo:

  • Abre fichero INI
  • Lee “valor” de la  clave “key” de la sección “seccion”

Para escribir, hago:

  • Accede al fichero INI
  • Guarda “valor“, para la clave “key” en la sección “seccion”

En Python, una de las librerías que facilita trabajar con archivos de configuración es ConfigParser, aunque ha habido una acción concreta que me ha llamado la atención, y aún desconozco el “porqué” de esa manera. El código es el siguiente:

import ConfigParser

parser = ConfigParser.SafeConfigParser()
fichero = "write.ini"
seccion = 'bug_tracker'
clave, valor = 'url', 'http://localhost:8080/bugs'
def Guardar():
parser.add_section()
parser.set(seccion, clave, valor)

sf = open(fichero,"w") # Necesito el fichero INI "preparado" para grabar información
parser.write(sf)
sf.close()

Guardar()

Para guardar información, me ha llamado la atención que haya que “abrir” el fichero (con open(fichero,”w”)) en lugar de hacerlo dentro de la variable “parser“, tal que así:
parser.write(fichero)
Si lo hacemos así, da un error! Lo que yo veo más lógico es que la propia clase ConfigParser sea la encargada de abrir, escribir y cerrar el fichero. No es el caso!

Lectura de datos de fichero INI

La lectura de datos del fichero de configuración es más lógica, y más simple:

def Leer():
parser.read(fichero)
secciones = parser.sections()
if len(secciones)>0:
url = parser.get(seccion,clave)
print url
else:
print "No es fichero INI"

En resumen, que la librería configParser es una buena herramienta para trabajar con archivos de configuración, a pesar de que te “obliga” a algunas cosas. Estoy convencido de que alguien tendrá alguna clase mejorada basándose en esta librería que facilite las cosas.

Un saludo.

Google+ Comments - Comentarios Google+