Разбор файла конфигурации с Python, имеющего более одной переменной с одинаковым именем
Есть ли способ проанализировать файл конфигурации, как это с Python3?
path = .MyAppData
prefer = newer
path = Dokumente
Пожалуйста, не вините меня.;) Я не создавал программное обеспечение, производящее файлы конфигурации, подобные этому. Но они имеют смысл в этом особом контексте.
я знаю ConfigParser
а также configobj
для Python3, но не вижу способа сделать это.
1 ответ
ConfigParser
инициализатор поддерживает strict=False
аргумент, который позволяет дубликаты. Но какое значение сохраняется в этом случае, насколько я могу судить, не указано в документации.
Одно простое решение - преобразовать строки в словарь самостоятельно;
In [1]: txt = '''path = .MyAppData
...: prefer = newer
...: path = Dokumente'''
In [2]: txt.splitlines()
Out[2]: ['path = .MyAppData', 'prefer = newer', 'path = Dokumente']
(После разделения текста на строки вы можете отфильтровать комментарии и пустые строки.)
In [3]: [ln.split('=') for ln in txt.splitlines()]
Out[3]: [['path ', ' .MyAppData'], ['prefer ', ' newer'], ['path ', ' Dokumente']]
In [4]: vars = [ln.split('=') for ln in txt.splitlines()]
(На этом этапе вы можете добавить фильтр для внутренних списков, чтобы у вас были только списки длиной 2, что указывает на успешное разделение.)
In [5]: {a.strip(): b.strip() for a, b in vars}
Out[5]: {'path': 'Dokumente', 'prefer': 'newer'}
В понимании dict (в [5]) более поздние назначения будут иметь приоритет перед более ранними.
Конечно, если prefer = older
Вы должны были бы полностью изменить линии прежде, чем понимание dict.