Recherche de site Web

Comment lire un fichier de propriétés dans Python ?


Nous pouvons utiliser le module jproperties pour lire un fichier de propriétés en Python. Un fichier de propriétés contient des paires clé-valeur sur chaque ligne. Le signe égal (=) fonctionne comme le délimiteur entre la clé et la valeur. Une ligne qui commence par # est considérée comme un commentaire.

Installation de la bibliothèque jproperties

Ce module ne fait pas partie de l'installation standard. Nous pouvons installer le module jproperties en utilisant PIP.

pip install jproperties

Lecture d'un fichier de propriétés en Python

J'ai créé un fichier de propriétés pour notre exemple : app-config.properties.

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

La première étape consiste à importer l'objet Properties dans notre programme Python et à l'instancier.

from jproperties import Properties

configs = Properties()

La prochaine étape consiste à charger le fichier de propriétés dans notre objet Properties.

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

Lecture recommandée : Python avec l'instruction

Maintenant, nous pouvons lire une propriété spécifique à l'aide de la méthode get() ou par l'intermédiaire de l'index. L'objet Properties est très similaire à un dictionnaire Python.

La valeur est stockée dans un objet PropertyTuple, qui est un tuple nommé de deux valeurs - données et métadonnées. Les jproperties prennent également en charge les métadonnées des propriétés, mais cela ne nous intéresse pas ici.

print(configs.get("DB_User"))  
PropertyTuple(data='root', meta={})

print(f'Database User: {configs.get("DB_User").data}')  
Database User: root

print(f'Database Password: {configs["DB_PWD"].data}')  
Database Password: root@neon

Nous pouvons utiliser la fonction len() pour obtenir le nombre de propriétés.

print(f'Properties Count: {len(configs)}')  
Properties Count: 4

Que se passe-t-il si la clé n'existe pas ?

Si la clé n'existe pas, la méthode get() renverra None.

random_value = configs.get("Random_Key")
print(random_value)  # None

Mais, si nous utilisons l'index, alors une KeyError est levée. Dans ce cas, il est préférable de gérer cette exception en utilisant un bloc try-except.

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

Output:
'Key not found', lookup key was "Random_Key"

Impression de toutes les propriétés

Nous pouvons utiliser la méthode items() pour obtenir une collection de tuples, qui contient des clés et des valeurs PropertyTuple correspondantes.

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

for item in items_view:
    print(item)

Sortie:

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

Puisque nous cherchons à imprimer key=value comme sortie, nous pouvons utiliser le code suivant.

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

Sortie:

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

Obtenir la liste des clés à partir du fichier de propriétés

Voici un programme complet pour lire le fichier de propriétés et créer une liste de toutes les clés.

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)  
['DB_HOST', 'DB_SCHEMA', 'DB_User', 'DB_PWD']

Lire le fichier de propriétés en Python dans un dictionnaire

Un fichier de propriétés est identique à un dictionnaire. Il est donc courant de charger le fichier de propriétés dans un dictionnaire. Les étapes sont similaires à celles mentionnées ci-dessus, à l'exception du changement dans le code d'itération pour ajouter les éléments à un dictionnaire.

db_configs_dict = {}

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

print(db_configs_dict)
{'DB_HOST': 'localhost', 'DB_SCHEMA': 'Test', 'DB_User': 'root', 'DB_PWD': 'root@neon'}

Référence : page jproperties de PyPI