102 votes

Le ConfigParser lit les clés en majuscules et les met en minuscules

J'ai fait une observation intéressante. J'avais écrit un programme de lecture de fichier de configuration comme suit,

import ConfigParser
class  ConfReader(object):
    ConfMap = dict()

    def __init__(self):
        self.config = ConfigParser.ConfigParser()
        self.config.read('./Config.ini')
        self.__loadConfigMap()

    def __loadConfigMap(self):
        for sec in self.config.sections():
            for key,value in self.config.items(sec):
                print 'clé = ', key, 'Valeur = ', value
                keyDict = str(sec) + '_' + str(key)
                print 'keyDict = ' + keyDict  
                self.ConfMap[keyDict] = value

    def getValue(self, key):
        value = ''
        try:
            print ' Clé = ', key
            value = self.ConfMap[key] 
        except KeyError as KE:
            print 'Clé', KE , 'non trouvée dans la configuration.'
    return value

class MyConfReader(object):
    objConfReader = ConfReader()

def main():
     print MyConfReader().objConfReader.getValue('DB2.poolsize')
     print MyConfReader().objConfReader.getValue('DB_NAME')

if __name__=='__main__':
    main()

Et mon fichier Config.ini ressemble à ceci,

[DB]
HOST_NAME=localhost
NAME=temp
USER_NAME=postgres
PASSWORD=mandy

__loadConfigMap() fonctionne très bien. Mais en lisant les clés et les valeurs, il met les clés en minuscules. Je n'ai pas compris la raison. Quelqu'un peut-il s'il vous plaît expliquer pourquoi c'est le cas?

175voto

Martijn Pieters Points 271458

ConfigParser.ConfigParser() est documenté pour se comporter de cette manière, dans la section Accès au protocole de mappage:

Par défaut, toutes les clés dans les sections sont accessibles de manière insensible à la casse. Par exemple, for option in parser["section"] ne renvoie que des noms de clés d'options transformés en optionxform. Cela signifie que les clés sont en minuscules par défaut.

Cela est dû au fait que ce module analyse les fichiers INI Windows qui sont censés être analysés de manière insensible à la casse.

Vous pouvez désactiver ce comportement en remplaçant la fonction ConfigParser.optionxform():

self.config = ConfigParser.ConfigParser()
self.config.optionxform = str

str laisse passer les options inchangées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X