我使用python ConfigObj加载配置文件,如果配置文件的格式为“ cfgName = cfgvalue”,则效果很好。

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

购物篮

[favoFruit]
Apple
Orange


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

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

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

最佳答案

configobj不支持您尝试使用它们的方式列出,而是以逗号分隔的值:

[fruit]
favourite = Apple, Orange


在代码中,您只需照常访问该属性:

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


有关更多信息,请查看此article

编辑:如果您确实需要支持与问题格式完全相同的格式的配置文件,请注意,为它编写自定义解析器会很容易:

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

关于python - python configObj可以处理没有'='的行吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9224546/

10-12 18:21