Python et les fichiers de configuration .ini

 

ConfigParser - Travailler avec les fichiers de configuration Objectif: lire / écrire des fichiers de configuration par python est similaire aux fichiers Windows INI. Utilisez le module python ConfigParser pour gérer les fichiers de configuration modifiables par l'utilisateur pour une application python. Les fichiers de configuration sont organisés en sections et chaque section peut contenir des paires nom-valeur pour les données de configuration. L'interpolation de valeurs à l'aide de chaînes de formatage Python est également prise en charge, afin de générer des valeurs qui dépendent les unes des autres (particulièrement utile pour les URL et les chaînes de message).

 

1 - Le module configparser

Le langage Python est doté d'un module nommé configparser qui permet d'utiliser et manipuler les fichiers de configuration similaires aux fichiers Windows du type .ini




le module configparser pourra être utilisé pour gérer les fichiers de configurations modifiables par l'utilisateur au sein d'une application. Le contenu d'un fichier de configuration peut être organisé en sections contenant chacune des paramètres avec des valeurs associées. Plusieurs types de valeurs d'options sont pris en charge, y compris les entiers, les valeurs à virgule flottante et les booléens.

2  -Format du fichier de configuration

Le format de fichier utilisé par configparser est similaire à celui utilisé par les anciennes versions de Microsoft Windows. Il se compose d'une ou de plusieurs sections nommées, chacune pouvant contenir des options avec des noms et des valeurs.

  1. Les sections de fichier de configuration sont identifiées en recherchant les lignes commençant par [ et se terminant par ]. La valeur entre les crochets désigne le nom de la section et peut contenir tous les caractères sauf les crochets.
  2. Les options sont répertoriées une par ligne dans une section. La ligne commence par le nom de l'option, qui est séparée de la valeur par un signe deux-points " : " ou un signe égale  " = "
  3. Les  commentaires : sont des lignes commençant par un point-virgule " ; " ou une dièse " # "  et sont traitées comme des commentaires et ne sont pas visibles lors de l'accès par programme au contenu du fichier de configuration.

L'exemple suivant du fichier de configuration, comporte une section nommée settings avec trois options, host, username et password:

Exemple. configuration.ini

# paramètres de configuration du serveur 
[settings]
host :  127.0.0.1 
username :  root
password :  root

3 - Lecture de la valeur d'une option d'un fichier de configuration .ini en Python

Avec le langage Python on peut se servir du module configparser et la méthode read() de l'objet ConfigParser pour lire le fichier de configuration:

Exemple. Lecture du fichier configuration.ini en Python

from configparser import ConfigParser
parser = ConfigParser() 
parser.read('configuration.ini')

# Affichage de la valeur du paramètre 'host'
print(parser.get('settings', 'host'))

4 - Mettre à jour un paramètre

Pour mettre à jour un paramètre du fichier de configuration, on doit préalablement l'ouvrir en mode lecture et écriture et utiliser ensuite la méthode set() de la classe ConfigParser

Exemple. mettre à jour la valeur du paramètre 'host'

# -*- coding: utf-8 -*- 
from configparser import ConfigParser 
parser = ConfigParser() 
parser.read('configuration.ini') 

# Ouverture du fichier de configuration en mode lecture et écriture
file = open('configuration.ini','r+')

# mettre à jours la valeur du paramètre 'host'
parser.set('settings', 'host',"'localhost'") 
parser.write(file) 
file.close()

Maintenant si vous ouvrez le fichier configuration.ini, vous allez constater que le paramètre host = 127.0.0.1 est devenu host =  localhost

5 - Lecture des sections d'un fichier de configuration

La méthode sections() de l'objet parser, permet de récupérer les sections du fichier de configuration sous forme d'une liste :

Exemple. configuration.ini

[settings]  
# paramètres de configuration du serveur  
host     : 127.0.0.1  
username : root  
password : root

[Safe_Mode] 
# http://php.net/safe-mode 
safe_mode = Off 
safe_mode_gid = on

[File_Uploads] 
# http://php.net/file-uploads 
file_uploads = On 
upload_tmp_dir = "c:/wamp/tmp" 
upload_max_filesize = 2M

Exemple. lecture des sections du fichier configuration.ini

from configparser import ConfigParser
parser = ConfigParser() 
parser.read('configuration.ini') 
sec = parser.sections() 
print(sec) # Affiche : ['settings', 'Safe_Mode', 'File_Uploads']

6 - Lire la liste des options avec la méthode options()

La méthode options() de l'objet ConfigParser, permet de récupérer la liste des options d'une section du fichier de configurations:

Exemple. Liste des options de la première section:

# -*- coding: utf-8 -*- 
from configparser import ConfigParser
parser = ConfigParser() 
parser.read('configuration.ini')
# pointer vers la première section 
sec = parser.sections()[0]
# obtenir la liste des options 
print(sec, parser.options(sec)) # Affiche: settings ['host', 'username', 'password']





Et en utilisant la boucle for, on peut obtenir toutes les sections avec leurs options :

Exemple. Liste de toutes les sections avec leurs options :

# -*- coding: utf-8 -*- 
from configparser import ConfigParser
parser = ConfigParser() 
parser.read('configuration.ini')

# Parcourt de toutes les sections
for sec in parser.sections():
    # parcourt des options des différentes sections
    print(sec, " : " , parser.options(sec))

Ce qui affiche à l'exécution :

settings : ['host', 'username', 'password']
Safe_Mode : ['safe_mode', 'safe_mode_gid']
File_Uploads : ['file_uploads', 'upload_tmp_dir', 'upload_max_filesize']

7 - Lecture totale avec la méthode items()

La méthode items(), permet de récupérer les noms des paramètres à avec leurs valeurs :

Exemple. récupération des paramètres et valeurs de la premières section

# -*- coding: utf-8 -*- 
from configparser import ConfigParser
parser = ConfigParser() 
parser.read('configuration.ini')

# Pointer vers la première section
sec = parser.sections()[0] 
print(sec, " : ")
for name, value in parser.items(sec):     
    print('  {} = {}'.format(name, value))

Affichage complet des sections avec leurs paramètres et valeurs :

# -*- coding: utf-8 -*- 
from configparser import ConfigParser
parser = ConfigParser() 
parser.read('configuration.ini')

# Parcourt des sections
for sec in parser.sections():     
    print(sec," : ") 
    # parcourt des paramètres et valeurs   
    for name, value in parser.items(sec):        
        print('  {} = {}'.format(name, value))

Ce qui affiche après exécution:

settings  : 
  host = 127.0.0.1
  username = root
  password = root
Safe_Mode  : 
  safe_mode = Off
  safe_mode_gid = on
File_Uploads  : 
  file_uploads = On
  upload_tmp_dir = "c:/wamp/tmp"
  upload_max_filesize = 2M

8 - Ajouter une section avec la méthode add_section()

Avec la méthode add_section() de la classe ConfigParser, on peut ajouter autant de sections qu'on souhaite, pour cela on doit préalablement ouvrir le fichier de configuration en mode lecture et écriture et utiliser ensuite la méthode set() de la classe ConfigParser afin de pouvoir définir et ajouter de nouvelles options à la section.

Exemple. Ajout d'une section nommée mysqld

# -*- coding: utf-8 -*- 
from configparser import ConfigParser 
parser = ConfigParser() 
parser.read('configuration.ini')

# Ouverture du fichier de configuration
file = open('configuration.ini','r+') 

# Ajout d'une nouvelle section mysqld
parser.add_section('mysqld') 
# Définition et ajout de nouvelles options
parser.set('mysqld', 'port', '3306') 
parser.set('mysqld', 'table_cache','64') 
parser.write(file) 
file.close()





Après exécution du code,  vous verrez une nouvelle section [mysqld] qui s'ajoute au fichier  configuration.ini:

[settings]
host = 127.0.0.1
username = root
password = root

[Safe_Mode]
safe_mode = Off
safe_mode_gid = on

[File_Uploads]
file_uploads = On
upload_tmp_dir = "c:/wamp/tmp"
upload_max_filesize = 2M

[mysqld]
port = 3306
table_cache = 64

e_uploads = On 
upload_tmp_dir = "c:/wamp/tmp" 
upload_max_filesize = 2M

 

 

Younes Derfoufi
CRMEF OUJDA

 

2 thoughts on “Python et les fichiers de configuration .ini

Leave a Reply