83 votes

Convertir ConfigParser.items('') en dictionnaire

Comment puis-je convertir le résultat d'un fichier ConfigParser.items('section') en dictionnaire pour formater une chaîne comme ici :

import ConfigParser

config = ConfigParser.ConfigParser()
config.read('conf.ini')

connection_string = ("dbname='%(dbname)s' user='%(dbuser)s' host='%(host)s' "
                     "password='%(password)s' port='%(port)s'")

print connection_string % config.items('db')

103voto

Ian Clelland Points 15066

Avez-vous essayé

print connection_string % dict(config.items('db'))

?

88voto

Michele d'Amico Points 4133

Comment je l'ai fait en une seule ligne.

my_config_parser_dict = {s:dict(config.items(s)) for s in config.sections()}

Pas plus que d'autres réponses, mais quand ce n'est pas les vraies entreprises de votre méthode et que vous en avez besoin en un seul endroit, utilisez moins de lignes et prenez le pouvoir de la compréhension dictée pourrait être utile.

26voto

James Kyle Points 21

Je sais que cela a été demandé il y a longtemps et qu'une solution a été choisie, mais la solution choisie ne tient pas compte des valeurs par défaut et de la substitution variable. Puisqu' il s'agit du premier succès lors de la recherche de création de dards à partir d'analyseurs, j'ai pensé publier ma solution qui inclut des substitutions par défaut et variables en utilisantConfigParser.items ().

from ConfigParser import SafeConfigParser
defaults = {'kone': 'oneval', 'ktwo': 'twoval'}
parser = SafeConfigParser(defaults=defaults)
parser.set('section1', 'kone', 'new-val-one')
parser.add_section('section1')
parser.set('section1', 'kone', 'new-val-one')
parser.get('section1', 'ktwo')
parser.add_section('section2')
parser.get('section2', 'kone')
parser.set('section2', 'kthree', 'threeval')
parser.items('section2')
thedict = {}
for section in parser.sections():
    thedict[section] = {}
    for key, val in parser.items(section):
        thedict[section][key] = val
thedict
{'section2': {'ktwo': 'twoval', 'kthree': 'threeval', 'kone': 'oneval'}, 'section1': {'ktwo': 'twoval', 'kone': 'new-val-one'}}

Une fonction de commodité pour faire cela pourrait ressembler à quelque chose comme :

def as_dict(config):
    """
    Converts a ConfigParser object into a dictionary.

    The resulting dictionary has sections as keys which point to a dict of the
    sections options as key => value pairs.
    """
    the_dict = {}
    for section in config.sections():
        the_dict[section] = {}
        for key, val in config.items(section):
            the_dict[section][key] = val
    return the_dict

11voto

Keith Points 554

Pour une section individuelle, par exemple "général", vous pouvez faire :

dict(parser['general'])

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