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()
Realmente útil 🙂 . Por cierto, ¿ConfigParser es parte de las librerías base de Python 2.5? (¿O es una librería añadida?)
Es parte de la librería estándar Andreu.
En Python 3.0 lo han renombrado a
configparser
, por cierto.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
Muy util sin duda.
Ojala lo hubiese conocido antes que me e comido el coco pensando en como hacerme uno XD
@Son Link vaya, pues lo escribí hace unos días, si lo llego a saber lo publico antes 😛
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.
Sorry, a este http://revistacodigolatino.blogspot.com/2008/12/cdigo-latino-9-online.html en la página 17
😛
Quisiera saber si tiene alguna opcion para cambiarle el nombre a una seccion que ya exista…..
2 años despues me encuentro esto y me solucionas la vida, te quiero xD
Buenísimo!!! Muchas gracias, me ha sido de gran ayuda
Muy buena, gracias.