Archivos de configuración en Python

ConfigParser es un módulo muy útil a la hora de leer y escribir archivos de configuración al estilo de los .ini de Windows, con distintas secciones delimitadas por un nombre de sección entre corchetes y pares clave-valor con la forma “clave: valor” o “clave=valor“.

[una seccion]
clave1=valor1
clave2: valor2

[otra seccion]
# esto es un comentario
; y esto otro comentario
clave1=mundogeek.net
clave2=valor


Para llevar a cabo la escritura y lectura de estos archivos usaremos la clase ConfigParser del módulo.

Para poder leer valores, primero tendremos que crear una instancia de esta clase, y llamar después al método read al que debemos pasar como parámetro una lista con el archivo o archivos de configuración a leer.

import ConfigParser

cfg = ConfigParser.ConfigParser()
cfg.read(["config.cfg"])

Si una o varias de las rutas no existen, simplemente se ignorarán. Sin embargo, el método devuelve una lista con los archivos parseados por lo que es sencillo comprobar qué archivos se han leído o si existía alguno.

import ConfigParser

cfg = ConfigParser.ConfigParser()
if not cfg.read(["conf.ini"]):
    print "No existe el archivo"

Una vez la clase haya leído y parseado el archivo o archivos de configuración, podremos obtener el valor de una opción cualquiera utilizando el método get de la clase, al que se le pasa el nombre de sección y la clave a recuperar.

import ConfigParser

cfg = ConfigParser.ConfigParser()
cfg.read(["config.cfg"])

usuario = cfg.get("login", "nombre")

En el caso de que la sección no exista se lanzará una excepción NoSectionError. Así mismo, si no existe la opción, se lanzará una excepción NoOptionError.

Si queremos comprobar si existe una sección o una opción, en lugar de encerrar el código en bloques try, podemos utilizar las funciones has_section(seccion) y has_option(seccion, opcion)

import ConfigParser

cfg = ConfigParser.ConfigParser()
cfg.read(["config.cfg"])

if cfg.has_option("login", "nombre"):
    usuario = cfg.get("login", "nombre")
else:
    print "No se encontró el nombre en el archivo de configuración."

Modificar o crear un nuevo archivo de configuración es tanto o más sencillo. Para añadir nuevas secciones se utiliza el método add_section(seccion), para añadir nuevas opciones a una sección set(seccion, clave, valor), y para escribir el archivo, se utiliza el método write(archivo).

import ConfigParser

cfg = ConfigParser.ConfigParser()

cfg.add_section("login")
cfg.set("login", "nombre", "raul")

f = open("config.cfg", "w")
cfg.write(f)
f.close()


Comentarios
  1. Realmente útil 🙂 . Por cierto, ¿ConfigParser es parte de las librerías base de Python 2.5? (¿O es una librería añadida?)

    Responder

  2. Es parte de la librería estándar Andreu.

    En Python 3.0 lo han renombrado a configparser, por cierto.

    Responder

  3. Excelente y para tenerlo en cuenta. Agrego una cosa más, exite otra alternativa que son los archivos de configuración YAML la cuál tiene su implementación en Python con el módulo PyYAML muy similar a este.

    Saludos

    Responder

  4. Son Link

    Muy util sin duda.
    Ojala lo hubiese conocido antes que me e comido el coco pensando en como hacerme uno XD

    Responder

  5. @Son Link vaya, pues lo escribí hace unos días, si lo llego a saber lo publico antes 😛

    Responder

  6. Se parece mucho a este
    http://radicalpython.blogspot.com/2008/10/archivos-de-configuracin-o-ini-de.html

    empezando por el archivo de configuración, solo que lo detallaste un poquito más.

    Responder

  7. Reiniel

    Quisiera saber si tiene alguna opcion para cambiarle el nombre a una seccion que ya exista…..

    Responder

  8. Nekeniehl

    2 años despues me encuentro esto y me solucionas la vida, te quiero xD

    Responder

  9. betibaskonia

    Buenísimo!!! Muchas gracias, me ha sido de gran ayuda

    Responder

  10. Sergio

    Muy buena, gracias.

    Responder

Deja un comentario