Como Ler um Arquivo de Propriedades em Python?

Podemos usar o módulo jproperties para ler um arquivo de propriedades em Python. Um arquivo de propriedades contém pares chave-valor em cada linha. O sinal de igual (=) funciona como o delimitador entre a chave e o valor. Uma linha que começa com # é tratada como um comentário.

Instalando a Biblioteca jproperties

Este módulo não faz parte da instalação padrão. Podemos instalar o módulo jproperties usando PIP.

# pip install jproperties

Lendo Arquivo de Propriedades em 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

# Banco de Dados Credenciais

from jproperties import Properties

configs = Properties()

O primeiro passo é importar o objeto Properties para o nosso programa Python e instanciá-lo.

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

O próximo passo é carregar o arquivo de propriedades para o nosso objeto Properties.

Leitura Recomendada: Python com Statement

Agora, podemos ler uma propriedade específica usando o método get() ou através do índice. O objeto Properties é muito semelhante a um Dicionário Python.

print(configs.get("DB_User"))  
O valor é armazenado em um objeto PropertyTuple, que é uma tupla nomeada de dois valores - dados e meta. As jproperties também suportam metadados de propriedades, mas não estamos interessados nisso aqui.

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

print(f'Database Password: {configs["DB_PWD"].data}')  
# Usuário do Banco de Dados: root

# Senha do Banco de Dados: root@neon

print(f'Properties Count: {len(configs)}')  
Pode-se usar a função len() para obter a contagem de propriedades.

# Contagem de Propriedades: 4

E se a chave não existir?

random_value = configs.get("Random_Key")
print(random_value)  Se a chave não existir, o método get() retornará None.

# None

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

Mas, se usarmos o índice, então será gerado um KeyError. Nesse caso, é melhor lidar com essa exceção usando um bloco try-except.
# Saída:

# ‘Chave não encontrada’, chave de busca foi “Random_Key”

Imprimindo Todas as Propriedades

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

for item in items_view:
    print(item)

Podemos usar o método items() para obter uma coleção de Tupla, que contém chaves e os valores correspondentes de TuplaPropriedade.

<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={}))

Saída:

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

Já que queremos imprimir chave=valor como saída, podemos usar o seguinte código.

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

Saída:

Obtendo Lista de Chaves do Arquivo de Propriedades

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)  
Aqui está um programa completo para ler o arquivo de propriedades e criar uma lista de todas as chaves.

# [‘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)
Python Ler Arquivo de Propriedades para Dicionário

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

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