Contenu | Rechercher | Menus

Annonce

La nouvelle clé USB Ubuntu-fr est en prévente
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/04/2019, à 16:30

kholo

[résolu] python module de fichier de configuration

Bonjour ami pythoniens,
je cherche à faire un module pour lire et, plus tard, écrire des configurations.
Mon idée est ensuite d'avoir juste des fichiers .conf qui seront lus facilement par ce module une fois celui ci importé.
peut être suis-je en train de ré inventer la roue !

prenons un fichier de configuration
configuration.conf

# debug_mode = 1
debug_mode = 0
# ********************************************
titre = Un titre
geometry = 450x650+250+50
relief = raised

une_liste = I, II, III, IV, V, VI, VII
des_nombres = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

puis mon module
configuration.py

#!/usr/bin/env python3
# -*- coding: UTF8 -*-
"""
module de gestion de fichiers de configuration

"""

__title__ = "Ki conf"
__author__ = 'Ury Cyril : kholo'
__license__ = 'cc'
__copyright__ = 'Creative Common 2018-2019'
__ver_major__ = 0
__ver_minor__ = 1
__ver_patch__ = 0
__ver_sub__ = ''
__version__ = "%d.%d.%d%s" % (__ver_major__, __ver_minor__,
                              __ver_patch__, __ver_sub__)


class Configuration(object):
    """ class de configuration """
    def __init__(self, fichier):
        self.dico = {}
        self.lecture_fichier_configuration(fichier)

    def __str__(self):
        retour = ""
        for elem in self.dico:
            retour += elem + " => " + self.dico[elem] + '\n'
        return retour

    def __repr__(self):
        return str(self.dico)

    def lecture_fichier_configuration(self, fichier):
        """ lecture du fichier de configuration puis
        ajout des entrées au dictionnaire """
        if isinstance(fichier, str) and len(fichier) > 1:
            with open(fichier,'r') as f:
                donnees = f.read()

        """ lecture séquentielle d'un fichier en mode texte
        avec une ligne pour chaque valeur donnée
        possibilité d'ajouter des commentaires avec le dieze #
        et des sauts de ligne qui ne seront pas pris en compte """
        elements = [x for x in donnees.split('\n') if len(x.strip(' ')) > 2 and x[0] != "#" and '=' in x]
        # print(elements)
        for element in elements:
            # print(element)
            key, value = element.split('=')
            key = key.strip(' ')
            value = value.strip(' ')
            """ ajout de l'entrée au dictionnaire """
            self.dico[key] = value
            # print(key, value)

    def liste(self, element):
        """ renvoie un des éléments sous forme de liste string de ses composantes """
        if element not in self.dico.keys():
            return None
        return [x.strip(' ') for x in self.dico[element].split(',')]


if __name__ == "__main__":
    ligne = 50*'-'
    f_conf = "configuration.conf"
    c = Configuration(f_conf)
    print("accès direct : titre", c.dico['titre'])
    print(ligne)
    print("tout via __str__")
    print(c)
    print(ligne)
    print("tout via __repr__")
    print(repr(c))
    print(ligne)
    print(c.liste("des_nombres"))
    print(ligne)
    print([int(x) for x in c.liste("des_nombres")])

puis une application qui importe et utilise ce module
mon_application.py

#!/usr/bin/env python3
# -*- coding: UTF8 -*-
"""
module de test d'utilisation d'un module lecteur de fichier de conf

"""

import configuration as conf

if __name__ == "__main__":
    c = conf.Configuration("configuration.conf")
    print(c)
    print(repr(c))
    print("démo pour une liste", c.liste("des_nombres"))

voilà... en définitive, mon module de conf n'est qu'un dico avec des fonctions pour lire puis (donc plus tard) écrire un voire des fichiers de conf en texte, voire parser des éléments de conf et simplifier leur accès au lieu de mettre du global (plutôt pour de la lecture seule) ou autre.

Alors, j'ai ré inventé la roue ?
PS : oui, je sais, on peut importer des lecteurs / parseur de csv wink

Dernière modification par kholo (Le 09/04/2019, à 19:32)

Hors ligne

#2 Le 09/04/2019, à 19:02

mikael8349

Re : [résolu] python module de fichier de configuration

Bonjour kholo,

Tu réinvente la roue, il existe le module configparser. Il le fait très bien smile

Après c'est toujours formateur de réinventer la roue wink

Voici la liste des modules standard python, très pratique (par exemple argparse / getopt pour la gestion des lignes de commandes, logging pour la gestion logs, ...).

Dernière modification par mikael8349 (Le 09/04/2019, à 19:05)

Hors ligne

#3 Le 09/04/2019, à 19:28

kholo

Re : [résolu] python module de fichier de configuration

cooool !!!
voilà bah merci, il suffisait de poser la question !!!

Hors ligne