IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

tyrtamos

Simplifier la gestion des fichiers "ini" en Python

Noter ce billet
par , 25/10/2014 à 09h47 (3883 Affichages)
[exemple de billet pour voir comment ça marche!]

Les fichiers "ini" sont des fichiers texte qui sont souvent intéressants pour conserver des données de configuration d'un programme, parce qu'ils permettent d'être consultés et, si nécessaire, modifiés en dehors des sessions du programme avec un simple éditeur de texte:

[section1]
option1_1 = toto
option1_2 = tata
[section2]
option2_1 = 123
option2_2 = hfdcjvcjgtjvgtvjgjv
option2_3 = 78.987
En Python (version 3 ici), on utilise le module "configparser". Mais plutôt que de manipuler directement les objets de ce module, je préfère intégrer dans mes programmes un fichier de bibliothèque "bibini.py" qui contient 2 fonctions qui permettent très facilement de charger et d'enregistrer un "dictionnaire de dictionnaires" qui est l'image du fichier "ini". Pour prendre l'exemple ci-dessus, dico["section2"]["option2_1"] contiendra "123".

J'utilise ici un dictionnaire ordonné (OrderedDict du module collections) pour que le fichier "ini" présente les données toujours dans le même ordre des sections et des options. Si cet aspect purement esthétique est inutile, il est facile de modifier le script pour utiliser le dictionnaire normal "dict".

Entête et importations:

Code PYTHON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Python 3
 
from configparser import ConfigParser
from collections import OrderedDict

Chargement du fichier "ini:

Code PYTHON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
def chargini(ficini, encodage="utf-8"):
    """charge le contenu du fichier ini 'ficini' avec l'encodage 'encodage'
       retourne le dictionnaire de dictionnaires ordonné, image des données
    """
    cfg = ConfigParser()
    with open(ficini, 'r', encoding=encodage) as fs:
        cfg.read_file(fs)
    dini = OrderedDict()
    for section in cfg.sections():
        dini[section] = OrderedDict()
        for option, valeur in cfg.items(section):
            dini[section][option] = valeur
    return dini

Enregistrement dans un fichier "ini":

Code PYTHON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
def sauvini(dini, ficini, encodage="utf-8"):
    """sauve le dictionnaire de dictionnaires 'dini' dans le fichier ini
       'ficini' avec l'encodage 'encodage'
    """
    cfg = ConfigParser()
    for section in dini:
        cfg.add_section(section)
        for option, valeur in dini[section].items():
            cfg.set(section, option, valeur)
    with open(ficini, 'w', encoding=encodage) as fd:
        cfg.write(fd)

Une fois le fichier "bibini.py" ainsi construit, il suffit de l'intégrer dans un programme et de l'importer comme suit pour gérer le fichier "ini" en tant que dictionnaire:

Code PYTHON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
from bibini import chargini, sauvini
...
dico = chargini("config.ini")
...
sauvini(dico, "config.ini")
...

Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog Viadeo Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog Twitter Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog Google Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog Facebook Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog Digg Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog Delicious Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog MySpace Envoyer le billet « Simplifier la gestion des fichiers "ini" en Python » dans le blog Yahoo

Mis à jour 25/10/2014 à 10h20 par tyrtamos

Catégories
Python

Commentaires