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
