2017-01-13 15 views
0

ini файл:ConfigParser получить все ключи с дубликатами

[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 

Результат:

key_1 
key_2 

Ожидаемый результат:

key_1 
key_2 
key_1 

Как достичь такого результата?

ответ

1

Это проблема, как работает парсер конфигурации в Python 2. Пара ключей-значений преобразуется в словарь. Это означает, что каждый ключ должен быть уникальным. Если у вас несколько ключей, выигрывает «последнее значение».

Попытка ваш пример в Python 3.5, дает следующее сообщение об ошибке:

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

Так что не использовать одни и те же клавишу несколько раз.

К счастью, есть портировать на Python 2. Просто:

pip install configparser 

Эта библиотека приносит обновленный configparser с Python 3.5 на Python 2.6-3.5.

Теперь, используйте так:

from configparser import ConfigParser 

Это то, что Wikipedia говорит о дубликатах:

Повторяющиеся имена

Большинство реализаций поддерживают только имея одно свойство с заданным именем в разделе. Второе вхождение имени свойства может привести к прерыванию, оно может быть проигнорировано (и отброшено значение), или оно может переопределить первое вхождение (при первом сброшенном значении). Некоторые программы используют двойные имена свойств для реализации многозначных свойств.

Интерпретация объявлений нескольких разделов с одинаковым именем также меняется. В некоторых реализациях дублирующие разделы просто объединяют свои свойства вместе, как если бы они возникали смежно. Другие могут прервать или игнорировать некоторые аспекты файла INI.

+0

Это не решение для меня. Основной момент этого действия - проверить дубликаты в файлах конфигурации и показать его. – oleksii

+0

Предполагается, что дубликаты должны быть ошибкой. Проверяют ли ошибочные файлы ini? –

+0

Предполагается, что дубликаты должны быть ошибкой - это не ошибка. ConfigParser пропускает дубликаты и показывает только последнюю пару ключ-значение. (В Python 2.7) – oleksii