2012-07-12 4 views
0

J'ai un fichier cfg qui a 10 sections ... et chacune de la section a des champs similaires.config parser python

[sec1] 
id:... 
[sec2] 
id.. 

... 

Alors maintenant .. Je suis en train de faire quelque chose comme ..

config_instance = ConfigParser.ConfigParser() 
id1 = config_instance.get("sec1","id") 
id2 = config_instance.get("sec2","id") 

et ainsi de suite

est-il une meilleure façon plus pythonique de le faire .. qu'il lit automatiquement tous les sections et extrait cette fonctionnalité?

Merci

+1

En supposant Python 2.X, à moins que vous avez besoin d'une compatibilité ascendante avec le code existant, vous devriez probablement utiliser 'ConfigParser.SafeConfigParser'. – mhawke

Répondre

2

Si toutes les parties ont (ou si vous connaissez une liste des sections qui ont un champ id), vous pouvez faire quelque chose comme:

sections=config_instance.sections() 
ids=[config_instance.get(sec,'id') for sec in sections] 

vous pouvez les déballer si vous voulez, mais je préfère la liste:

id1,id2,... = ids 

Ou, vous pouvez le faire comme un dictionnaire (python 2.7+):

ids={ sec:config_instance.get(sec,'id') for sec in sections } 
print ids['sec1'] 

Cela dépend vraiment de la façon dont vous voulez le faire.

1

Créez un dictionnaire avec les sections en tant que clés et les ID en tant que valeurs.

config = ConfigParser.ConfigParser() 
ids = {} 
for section in config.sections(): 
    if config.has_option(section, "id"): 
     ids[section] = config.get(section, "id")