Cómo leer un archivo de propiedades en Python?

Podemos usar el módulo jproperties para leer un archivo de propiedades en Python. Un archivo de propiedades contiene pares de clave-valor en cada línea. El signo igual (=) funciona como delimitador entre la clave y el valor. Una línea que comienza con # se trata como un comentario.

Instalando la Biblioteca jproperties

Este módulo no forma parte de la instalación estándar. Podemos instalar el módulo jproperties usando PIP.

# pip install jproperties

Leyendo un Archivo de Propiedades en Python

I have created a properties file for our example: app-config.properties.

# Database Credentials
DB_HOST=localhost
DB_SCHEMA=Test
DB_User=root
DB_PWD=root@neon

# Base de Datos Credenciales

from jproperties import Properties

configs = Properties()

El primer paso es importar el objeto Properties a nuestro programa de Python e instanciarlo.

with open('app-config.properties', 'rb') as config_file:
    configs.load(config_file)

El siguiente paso es cargar el archivo de propiedades en nuestro objeto Properties.

Lectura Recomendada: Declaración with en Python

Ahora, podemos leer una propiedad específica usando el método get() o a través del índice. El objeto Properties es muy similar a un diccionario de Python.

print(configs.get("DB_User"))  
 El valor se almacena en un objeto PropertyTuple, que es una tupla nombrada de dos valores: data y meta. Las jproperties también admiten metadatos de propiedades, pero aquí no nos interesa eso. 

print(f'Database User: {configs.get("DB_User").data}')  
# PropertyTuple(data='root', meta={})

print(f'Database Password: {configs["DB_PWD"].data}')  
# Usuario de la base de datos: root

# Contraseña de la base de datos: root@neon

print(f'Properties Count: {len(configs)}')  
Podemos usar la función len() para obtener el recuento de propiedades. 

# Cantidad de propiedades: 4

¿Qué sucede si la clave no existe?

random_value = configs.get("Random_Key")
print(random_value)   Si la clave no existe, el método get() devolverá None. 

# None

try:
    random_value = configs["Random_Key"]
    print(random_value)
except KeyError as ke:
    print(f'{ke}, lookup key was "Random_Key"')

 Pero, si usamos el índice, se lanzará KeyError. En ese caso, es mejor manejar esta excepción utilizando un bloque try-except.
# Salida:

# ‘Clave no encontrada’, la clave de búsqueda era “Random_Key”

Imprimiendo todas las propiedades

items_view = configs.items()
print(type(items_view))

for item in items_view:
    print(item)

Podemos usar el método items() para obtener una colección de tuplas, que contiene claves y valores de PropertyTuple correspondientes.

<class 'collections.abc.ItemsView'>
('DB_HOST', PropertyTuple(data='localhost', meta={}))
('DB_SCHEMA', PropertyTuple(data='Test', meta={}))
('DB_User', PropertyTuple(data='root', meta={}))
('DB_PWD', PropertyTuple(data='root@neon', meta={}))

Salida:

for item in items_view:
    print(item[0], '=', item[1].data)

Dado que queremos imprimir clave=valor como salida, podemos usar el siguiente código.

DB_HOST = localhost
DB_SCHEMA = Test
DB_User = root
DB_PWD = root@neon

Salida:

Obteniendo lista de claves desde el archivo de propiedades

from jproperties import Properties

configs = Properties()

with open('app-config.properties', 'rb') as config_file:
    configs.load(config_file)

items_view = configs.items()
list_keys = []

for item in items_view:
    list_keys.append(item[0])

print(list_keys)  
Aquí hay un programa completo para leer el archivo de propiedades y crear una lista de todas las claves.

# [‘DB_HOST’, ‘DB_SCHEMA’, ‘DB_User’, ‘DB_PWD’]

A properties file is the same as a dictionary. So, it’s a common practice to read the properties file into a dictionary. The steps are similar to above, except for the change in the iteration code to add the elements to a dictionary.

db_configs_dict = {}

for item in items_view:
    db_configs_dict[item[0]] = item[1].data

print(db_configs_dict)
Leer archivo de propiedades de Python en un diccionario

# {‘DB_HOST’: ‘localhost’, ‘DB_SCHEMA’: ‘Test’, ‘DB_User’: ‘root’, ‘DB_PWD’: ‘root@neon’}

Source:
https://www.digitalocean.com/community/tutorials/python-read-properties-file