Publicidad

Leer ficheros de configuración desde python


Por Alex el 11/08/2023 , Comentar el artículo

Comparte este artículo:      




Hay diversa formas en Python de leer ficheros de configuración y de diferentes formatos, en este articulo vamos a ver 2, los formatos ini y json. Veremos como cargar sus datos y como crear un función que nos devuelva un valor concreto en cualquier modulo de Python


He dejado el código del artículo en un repositorio de github: https://github.com/depruebas/py-config-files, hay dos directorio 01 donde esta los ficheros de la explicación que a continuación describo y 02 una clase para leer ficheros de configuración pasándole como parámetros el fichero, sección y valor que queremos recuperar.



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.



Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.