Leer ficheros .INI
Tomamos como ejemplo el fichero .ini siguiente:
[database]
host = localhost
port = 3306
username = myuser
password = mypassword
[logs]
path_log = /var/log/
path_app = /home/user/data/
Y lo guardamos como config.ini. Ahora para leerlos desde Python utilizaremos el modulo configparser, quedando el código de la siguiente forma:
# importamod el modulo para leer ficheros de configuración .INI
import configparser
# Instanciamos la calse ConfigParser
config = configparser.ConfigParser()
# Leemos el fichero .ini
config.read('config.ini')
# y con el método get de ConfigParser leemos los valores que queremos
# del fichero de configuración pasandole la sección y la clave
db_host = config.get('database', 'host')
db_port = config.get('database', 'port')
db_username = config.get('database', 'username')
db_password = config.get('database', 'password')
# lo mostramos por pantalla
print(db_host, db_port, db_username, db_password)
path_log = config.get('logs', 'path_log')
path_app = config.get('logs', 'path_app')
print(path_log, path_app)
De esta forma tan sencilla podemos leer ficheros de configuración en Python
Puedes obtener más información sobre ConfigParser en https://docs.python.org/3/library/configparser.html
Leer ficheros .json
Otra de las opciones que hay para leer ficheros de configuración en Python es utilizar el formato JSON que es muy estandard. Los ejemplos son los mismos adaptados al formato json.A continuación copio aquí los ficheros del proyecto y recordar que esta en el github en la carpeta 01.
{
"database": {
"host": "localhost",
"port": 3306,
"username": "myuser",
"password": "mypassword"
},
"logs": {
"path_log": "/var/log/",
"path_app": "/home/user/data/"
}
}
Y el correspondiente código para leer este fichero.
# Importamos el modulo para trabajar con ficheros JSON
import json
# Leemos y carganos en una varible los datos del fichero json
with open('config.json') as config_file:
config = json.load(config_file)
# Leemos la clave de la sección que queremos
db_host = config['database']['host']
db_port = config['database']['port']
db_username = config['database']['username']
db_password = config['database']['password']
print(db_host, db_port, db_username, db_password)
path_log = config['logs']['path_log']
path_app = config['logs']['path_app']
print(path_log, path_app)
Clase para leer ficheros .INI o .json
Ahora que ya sabemos leer ficheros .ini y .json vamos a crear una clase para poder utilizar en todos nuestros proyectos Python que pasando un fichero de configuración, una sección y una clave nos devuelva el valor que queremos.Este proyecto en el github esta en la carpeta 02. Y utiliza los mismos ficheros de configuración que he comentado antes asi que aqui os dejo el código en Python bien explicado para que podais seguirlo y entenderlo facilmente.
La clase y los ficheros de configuración estan en el directorio config pero se puden poner en otro sitio. Y en el raiz del proyecto hay un fichero init.py para probarla clase ConfigClass.py.
ConfigClass.py
# Importamos las clase que vamos a utilizar para leer los ficheros
# de configuración, en este caso .INI y .JSON
import configparser
import json
class ConfigClass:
# Método para leer los datos del un fichero de configuración.
# Recibe los parametros:
#
# file: fichero de configuración: formato = 'path/config.ini'
# section: sección del fichero de configuración, en el ejemplo database o logs
# key: Clave de la que queremos obtener su valor, ejem.: username
#
# Devuelve el valor asociado a la seccion/clave o un error.
#
def Get( file, section, key):
# Obtenemos la extensión para saber el tipo de fichero a procesar
config_file = file.split(".")
# Si el fichero es tipo .INI
if config_file[1] == 'ini':
# Cargamos el ConfigParser y leemos el fichero
config = configparser.ConfigParser()
config.read(file)
# Obtenemos el valor de la clave pasado y lo encerramos en un
# try ... except para poder tratar el error si no existe la clave o seccion
try:
return config.get( section, key)
except:
return "nothing1"
# hacemos lo mismo con los fichero .json
elif config_file[1] == 'json':
with open( file) as config_json_file:
config = json.load( config_json_file)
try:
return config[ section][ key]
except:
return "nothing2"
# Devolvemos un error o lo que queramos si el fichero de configuracion no existe
else:
return "nothing3"
Creamos un fichero de test init.py para probar la clase ConfigClass.py
init.py
# Incluimos nuestro modulo para leer ficheros de configuración
from config.ConfigClass import ConfigClass
# Leemos los datos que queremos del fichero de configuración con la
# clase ConfigClass y el método Get, los parametros que se pasan son
# el fichero de configuración, la sección y la clave del valor que
# queremos recuperar.
print( ConfigClass.Get ( 'config/config.ini', 'database', 'host'))
print( ConfigClass.Get ( 'config/config.ini', 'database', 'username'))
print( ConfigClass.Get ( 'config/config.json', 'database', 'password'))
print( ConfigClass.Get ( 'config/config.json', 'logs', 'perro'))
# comprobamos resultado si ponemos un fichero de configuracion que no existe
print( ConfigClass.Get ( 'config.txt', 'logs', 'path_app'))
Y este modulo de python para leer ficheros de configuración podemos incluirlo en nuestros proyectos.
Y esto es todo, feliz programming
Saludos
Alex.