Come leggere un file di proprietà in Python?

Possiamo utilizzare il modulo jproperties per leggere il file delle proprietà in Python. Un file delle proprietà contiene coppie chiave-valore in ogni riga. Il segno uguale (=) funziona come delimitatore tra la chiave e il valore. Una riga che inizia con # viene trattata come un commento.

Installazione della libreria jproperties

Questo modulo non fa parte dell’installazione standard. Possiamo installare il modulo jproperties utilizzando PIP.

# pip install jproperties

Lettura del file delle proprietà in 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

# Database Credenziali

from jproperties import Properties

configs = Properties()

Il primo passo è importare l’oggetto Properties nel nostro programma Python e istanziarlo.

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

Il passo successivo è caricare il file delle proprietà nel nostro oggetto Properties.

Lettura consigliata: Python con Statement

Ora, possiamo leggere una proprietà specifica usando il metodo get() o attraverso l’indice. L’oggetto Properties è molto simile a un Dizionario Python.

print(configs.get("DB_User"))  
Il valore è memorizzato in un oggetto PropertyTuple, che è una tupla nominata di due valori - data e meta. Le jproperties supportano anche metadati delle proprietà, ma qui non siamo interessati a questo.

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

print(f'Database Password: {configs["DB_PWD"].data}')  
# Utente del Database: root

# Password del Database: root@neon

print(f'Properties Count: {len(configs)}')  
Possiamo usare la funzione len() per ottenere il conteggio delle proprietà.

# Conteggio delle Proprietà: 4

Cosa succede se la chiave non esiste?

random_value = configs.get("Random_Key")
print(random_value)  Se la chiave non esiste, il metodo get() restituirà None.

# None

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

Ma, se usiamo l'indice, verrà sollevato un KeyError. In quel caso, è meglio gestire questa eccezione usando un blocco try-except.
# Output:


# ‘Chiave non trovata’, la chiave di ricerca era “Random_Key”

Stampa Tutte le Proprietà

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

for item in items_view:
    print(item)

Possiamo utilizzare il metodo items() per ottenere una collezione di Tuple, che contiene chiavi e i corrispondenti valori di PropertyTuple.

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

Output:

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

Poiché vogliamo stampare chiave=valore come output, possiamo utilizzare il seguente codice.

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

Output:

Ottenere la Lista delle Chiavi dal File delle Proprietà

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)  
Ecco un programma completo per leggere il file delle proprietà e creare una lista di tutte le chiavi.

# [‘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)
Leggere un file di proprietà Python in un dizionario

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

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