相关疑难解决方法(0)

在ConfigParser中列出

典型的ConfigParser生成的文件如下所示:

[Section]
bar=foo
[Section 2]
bar2= baz
Run Code Online (Sandbox Code Playgroud)

现在,有没有办法索引列表,例如:

[Section 3]
barList={
    item1,
    item2
}
Run Code Online (Sandbox Code Playgroud)

相关问题:每个部分Python的ConfigParser唯一键

python configparser

158
推荐指数
10
解决办法
15万
查看次数

如何ConfigParse文件保持相同键的多个值?

我需要能够使用它ConfigParser来读取同一个键的多个值.示例配置文件:

[test]
foo = value1
foo = value2
xxx = yyy
Run Code Online (Sandbox Code Playgroud)

使用"标准"使用时ConfigParser,将有一个foo具有该值的键value2.但我需要解析器读入两个值.

重复键上输入后,我创建了以下示例代码:

from collections import OrderedDict
from ConfigParser import RawConfigParser

class OrderedMultisetDict(OrderedDict):
    def __setitem__(self, key, value):

        try:
            item = self.__getitem__(key)
        except KeyError:
            super(OrderedMultisetDict, self).__setitem__(key, value)
            return

        print "item: ", item, value
        if isinstance(value, list):
            item.extend(value)
        else:
            item.append(value)
        super(OrderedMultisetDict, self).__setitem__(key, item)


config = RawConfigParser(dict_type = OrderedDict)
config.read(["test.cfg"])
print config.get("test",  "foo")
print config.get("test",  "xxx")

config2 = RawConfigParser(dict_type = OrderedMultisetDict)
config2.read(["test.cfg"])
print …
Run Code Online (Sandbox Code Playgroud)

python configparser python-2.7

12
推荐指数
3
解决办法
1万
查看次数

Python的ConfigParser每个部分的唯一键

我阅读了部分文档,并看到ConfigParser返回一个部分中选项的键/值对列表.我认为在一个部分中键不需要是唯一的,否则解析器只会返回一个映射.我围绕这个假设设计了我的配置文件模式,然后遗憾地意识到情况并非如此:

>>> from ConfigParser import ConfigParser
>>> from StringIO import StringIO
>>> fh = StringIO("""
... [Some Section]
... spam: eggs
... spam: ham
... """)
>>> parser = ConfigParser()
>>> parser.readfp(fh)
>>> print parser.items('Some Section')
[('spam', 'ham')]
Run Code Online (Sandbox Code Playgroud)

然后我回去找到了我应该阅读的文档部分:

节通常存储在内置字典中.可以将另一个字典类型传递给ConfigParser构造函数.例如,如果传递了对其键进行排序的字典类型,则将在回写时对这些部分进行排序,每个部分中的键也将进行排序.

保留我现有的配置文件方案(我现在非常喜欢;)我正在考虑传递一个类似于映射的对象,如上所述,它会累积值而不是破坏它们.是否有一种更简单的方法来防止我丢失的键/值崩溃?ConfigParser我应该编写一个ConfigParser自己的变体,而不是制作一个疯狂的适配器(如果实现更改可能会破坏)?

我觉得这可能是那些我只看到困难解决方案的"呃"时刻之一.

[编辑:]这是一个更精确的例子,说明我多次使用相同的密钥:

[Ignored Paths]
ignore-extension: .swp
ignore-filename: tags
ignore-directory: bin
Run Code Online (Sandbox Code Playgroud)

我不喜欢逗号分隔列表语法,因为当你将它缩放到很多值时,它很难看.例如,以逗号分隔的50个扩展名列表将不具有特别的可读性.

python configuration-files

8
推荐指数
1
解决办法
1万
查看次数