Я прочитал часть документов и увидел, что ConfigParser
возвращает список пар ключ / значение для опций в разделе. Я подумал, что ключи не обязательно должны быть уникальными в разделе, иначе парсер просто вернет отображение. Я разработал схему своего конфигурационного файла в соответствии с этим предположением, а затем, к сожалению, понял, что это не так:
>>> from ConfigParser import ConfigParser
>>> from StringIO import StringIO
>>> fh = StringIO("""
... [Some Section]
... spam: eggs
... spam: ham
... """)
>>> parser = ConfigParser()
>>> parser.readfp(fh)
>>> print parser.items('Some Section')
[('spam', 'ham')]
Затем я вернулся и нашел ту часть документов, которую я должен прочитал:
Разделы обычно хранятся в
встроенный словарь. Альтернатива
Тип словаря может быть передан
Конструктор ConfigParser. Например,
если передан тип словаря,
сортирует свои ключи, разделы будут
отсортировано при обратной записи, так как будет
ключи в каждом разделе.
Чтобы сохранить мою существующую схему файла конфигурации (которая мне действительно нравится сейчас;), я думаю о передаче подобного отображению объекта, как упомянуто выше, который накапливает значения вместо того, чтобы забивать их. Есть ли более простой способ предотвратить коллапс ключ / значение, который я пропускаю? Вместо создания сумасшедшего адаптера (который может сломаться, если реализация реализации ConfigParser
) я должен просто написать вариант самого ConfigParser
?
Я чувствую, что это может быть один из тех "скучных" моментов, когда я вижу только сложные решения.
[Edit:] Вот более точный пример того, как я хотел бы использовать один и тот же ключ несколько раз:
[Ignored Paths]
ignore-extension: .swp
ignore-filename: tags
ignore-directory: bin
Мне не нравится синтаксис с разделителями-запятыми, потому что это трудно на глаза, когда вы масштабируете его до многих значений; например, список из пятидесяти расширений, разделенных запятыми, не будет особенно удобочитаемым.