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()


11 pensamientos en “Archivos de configuración en Python”

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

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.