2

我使用 python ConfigObj 加载配置文件,如果配置文件模式为“cfgName=cfgvalue”,它会很好用。

现在我需要以这种方式编写配置文件:

篮子.ini

[favoFruit]
Apple
Orange

favoFruit['Apple','Orange']可以(如何)通过 ConfigObj将其加载为列表?

当前我只能Invalid line at line "2"在使用时收到错误消息cfgObj=ConfigObj('basket.ini')

YAML 或 JSON 可以做到这一点,我的问题是 ConfigObj 也可以做到吗?

4

1 回答 1

3

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

示例输出:

['苹果','橙色']

于 2012-02-10T08:28:13.510 回答