2017-01-13 2 views
0

fichier ini:ConfigParser obtenir toutes les clés avec les doublons

[main] 
key_1=1 
key_2=2 
key_1=3 

Python:

config_parser = ConfigParser() 
config_parser.optionxform = str 
config_parser.read('config.ini') 
for section in config_parser.sections(): 
    for key in dict(config_parser.items(section)): 
     print key 

Résultat:

key_1 
key_2 

Résultat attendu:

key_1 
key_2 
key_1 

Comment atteindre un tel résultat?

Répondre

1

Ceci est un problème de fonctionnement de l'analyseur de configuration de Python 2. Les paires clé-valeur sont converties en dictionnaire. Cela signifie que chaque clé doit être unique. Si vous avez plusieurs clés, la "dernière valeur gagne".

Essayer votre exemple en Python 3.5, donne ce message d'erreur:

DuplicateOptionError: While reading from 'config.ini' [line 4]: 
option 'key_1' in section 'main' already exists 

donc ne pas utiliser les mêmes clés à plusieurs reprises.

Heureusement, il y a un backport pour Python 2. Just:

pip install configparser 

Cette bibliothèque apporte la configparser mise à jour de Python 3.5 à Python 2.6 à 3.5.

Maintenant, utilisez comme ceci:

from configparser import ConfigParser 

C'est ce que Wikipedia dit au sujet des doublons:

Les noms en double

La plupart des implémentations prennent en charge que d'avoir une propriété avec un nom donné dans une section. La deuxième occurrence d'un nom de propriété peut provoquer un abandon, elle peut être ignorée (et la valeur rejetée), ou elle peut remplacer la première occurrence (avec la première valeur rejetée). Certains programmes utilisent des noms de propriétés en double pour implémenter des propriétés à valeurs multiples.

L'interprétation de plusieurs déclarations de section avec le même nom varie également. Dans certaines implémentations, les sections dupliquées fusionnent simplement leurs propriétés ensemble, comme si elles se produisaient de manière contiguë. D'autres peuvent abandonner ou ignorer certains aspects du fichier INI.

+0

Ce n'est pas une solution pour moi. Le point principal de cette action est de vérifier les doublons dans les fichiers de configuration et de les montrer – oleksii

+0

Les doublons sont supposés être une erreur. Vérifiez les fichiers ini erronés? –

+0

Les doublons sont censés être une erreur - ce n'est pas une erreur. ConfigParser est ignoré et affiche uniquement la dernière paire valeur/clé. (En Python 2.7) – oleksii