【发布时间】:2008-11-13 18:20:11
【问题描述】:
我阅读了the docs 的部分并看到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')]
然后我回去发现文档中我应该阅读的部分:
节通常存储在一个 内置字典。替代 字典类型可以传递给 ConfigParser 构造函数。例如, 如果传递了字典类型 对其键进行排序,部分将是 在回写时排序,将是 每个部分中的键。
为了保留我现有的配置文件方案(我现在真的很喜欢;),我正在考虑传递一个如上所述的类似映射的对象,它会累积值而不是破坏它们。有没有更简单的方法来防止我缺少的键/值崩溃?而不是制作一个疯狂的适配器(如果ConfigParser 的实现发生变化,它可能会中断)我应该只编写ConfigParser 本身的变体吗?
我觉得这可能是我只看到困难解决方案的那些“duh”时刻之一。
[编辑:]下面是一个更精确的示例,说明我希望如何多次使用同一个键:
[Ignored Paths]
ignore-extension: .swp
ignore-filename: tags
ignore-directory: bin
我不喜欢逗号分隔列表语法,因为当您将其缩放到多个值时,它会让人难以接受;例如,以逗号分隔的 50 个扩展名列表不会特别易读。
【问题讨论】:
-
我认为使用列表比 50 行 'ignore-extension:...' 更具可读性
-
真的吗?我不同意......每个单独的行你可以扫描列表 - 我从来没有发现逗号分隔的三字母扩展列表很漂亮。我还预计人们希望轻松评论任何给定的选项,这有利于单独的行。
标签: python configuration-files