Может ли Python configObj обрабатывать строку без '='

Я использую 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 ответ

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']

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

["Яблоко", "Апельсин"]

Другие вопросы по тегам