может ли Python configObj обрабатывать строку без '=' - PullRequest
2 голосов
/ 10 февраля 2012

Я использую python ConfigObj для загрузки файла конфигурации, он прекрасно работает, если файл конфигурации в шаблоне "cfgName = cfgvalue".

Теперь мне нужно написать файл конфигурации следующим образом:

basket.ini

[favoFruit]
Apple
Orange

может (как) загрузить это как список favoFruit['Apple','Orange'] от ConfigObj?

Текущее Я могу только получить сообщение об ошибке Invalid line at line "2" при использовании cfgObj=ConfigObj('basket.ini')

YAML или JSON могут сделать это, мой вопрос: может ли ConfigObj сделать это тоже?

1 Ответ

3 голосов
/ 10 февраля 2012

configobj не поддерживает списки, как вы пытаетесь их использовать, но как разделенные запятыми значения:

[fruit]
favourite = Apple, Orange

В вашем коде вам просто нужно получить доступ к атрибуту, как обычно:

>>> cfg = configobj.ConfigObj('basket.ini')
>>> cfg['fruit']['favourite']
['Apple', 'Orange']

Для получения дополнительной информации, пожалуйста, ознакомьтесь с этой статьей .

Редактировать: Если вам действительно нужно поддерживать файл конфигурации с тем же форматом, что и ввопрос, обратите внимание, что было бы легко написать собственный анализатор для него:

import re
from collections import defaultdict

def parse(f):
    data = defaultdict(list)
    section = None
    for line in f:
        line = line.strip()
        if not line:
            continue
        match = re.match('\[(?P<name>.*)\]', line)
        if match:
            section = match.group('name')
        else:
            data[section].append(line)
    return data

cfg = parse(open('basket.ini'))
print cfg['favoFruit']

Пример вывода:

['Apple', 'Orange']

...