Python : Fichiers de config

De Justine's wiki
Aller à la navigation Aller à la recherche

Utiliser un fichier de config avec le module configparser

Source

Ecrire un fichier de config

Les fichiers de configuration sont gérés par le module configparser. Une fois importé il est assez simple à utiliser : il fonctionne avec des sections et stocke des clef : valeur dans un fichier similaire aux .ini de chez Microsoft. On peut commenter le fichier de configuration avec # ou ; au début d'une ligne vide (pas sur une lignecontenant des informations).

Nous allons commencer par créer un fichier de configuration de façon programmatique. Il est important de noter que l'on est pas obligé de générer notre fichier de config comme cela.

import configparser 

config=configparser.ConfigParser() #Création de l'objet parseur
config['DEFAULT']={'Test': 'yes'} #config[section] = clef:valeur

#Plusieurs clef: valeurs dans une section
config['Section']={'clef1': 'valeur1', 'clef2': 'valeur2'} 

#Encore des clefs valeurs
config['bitbucket.org']={}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}



with open('maconfig.ini', 'w') as configfile:
        config.write(configfile)

Ce qui nous donne le fichier suivant:

[DEFAULT]
test = yes

[Section]
clef1 = valeur1
clef2 = valeur2 

[bitbucket.org]
user = hg

[topsecret.server.com]

Lire le contenu du fichier et récupérer les valeurs

Maintenant que nous avons notre fichier de config, on peut récupérer ses valeurs et utiliser les variables. Attention, les variables récupérées ne sont pas typées mais stockées sous la forme de str.

>>> import configparser
>>> config=configparser.ConfigParser()
>>> config.sections()
[]
>>> config.read('maconfig.ini')
['maconfig.ini']
>>> config.sections()
['Section', 'bitbucket.org', 'topsecret.server.com']
>>> 'coucou.fr' in config
False
>>> config['DEFAULT']['test']
'yes'
>>> for key in config:
...     print(key)
... 
DEFAULT
Section
bitbucket.org
topsecret.server.com
>>> for key in config['DEFAULT']:
...     print(key)
... 
test

Cela n'as rien de très complexe. Il faut surtout noter que les clefs sont toujours en minuscules, et que la section DEFAULT stocke les valeurs par défaut pour toutes les autres sections.

Récupérer les clefs et les valeurs et les mettre dans un dictionnaire

La méthode au dessus n'est pas vraiment la meilleure pour récupérer nos valeurs : si je veux récupérer un nombre indéfini de clefs : valeurs et les mettre dans un dictionnaire, il y'a plus simple.

Avec le fichier de config suivant :

[Clients]
cloudflare = 1.1.1.1

Je peux avoir un dictionnaire du type clients = {'CloudFlare' : '1.1.1.1'} comme ceci:

clients={}

config=configparser.ConfigParser() #Creating parser object
config.read('jumonitor.conf') #Reading the file (it is loaded in the parser itself)

#Getting the clients
print(config.items('Clients'))

for key, value in config.items('Clients'):
   clients[key]=value

print("Clients :\n", clients)

Récupérer des entiers

Il ne faut pas oublier que les variables sont, par défaut, récupérées en tant que str. il faut donc les re-typer :

Fichier de config:

[Alerts]
log_send_interval = 0

On peut faire :

log_send_intervals = int(config['Alerts']['log_send_interval'])

Il doit exister des méthodes propres à configparser; mais cette méthode a le mérite d'être simple et standard.


Récupérer des booléens

Vu que par défaut, tout est récupéré en str, on dispose d'une méthode pour récupérer les booléens. Ce n'est pas la peine d'essayer bool(ma configuration); en effet bool('False') est quand même True.

Avec le fichier de config:

[Alerts]
send_alerts = False

On peut faire:

print(config['Alerts'].getboolean('send_alerts'))

Utiliser print() sur un object ConfigParser

import configparser
config=configparser.ConfigParser()
#Sections
config['DEFAULT']={}
config['Clients']={'CloudFlare' : '1.1.1.1'}
config['Alerts']=\
{'log_send_interval' : '0',\
'send_alerts' : 'False'}

for section in config.sections():
    print(dict(config[section]))