【问题标题】:How to define and select groups of values using configobj?如何使用 configobj 定义和选择值组?
【发布时间】:2015-10-10 14:31:16
【问题描述】:

我想定义几组值,如果选择该组,则使用特定组的值。

这里有一个更清楚的例子:

[environment]
type=prod

[prod]
folder=data/
debug=False

[dev]
folder=dev_data/
debug=True

然后使用它:

print config['folder'] # prints 'data/' because config['environment']=='prod'

在 configobj 或其他方式中是否有自然或惯用的方式来执行此操作?


附加信息

我目前的想法是使用解析配置文件的一些逻辑后覆盖或添加到结果配置对象。但是,这感觉与配置文件的性质相反,并且感觉需要一些复杂的逻辑来验证。

【问题讨论】:

    标签: python configuration config configuration-files configobj


    【解决方案1】:

    我知道这可能不是您要搜索的内容,但您是否考虑过使用 json 轻松进行嵌套访问?

    例如,如果你的配置文件看起来像

    {
        "environment": {
            "type": "prod"
        },
        "[dev]": {
            "debug": "True",
            "folder": "dev_data/"
        },
        "[prod]": {
            "debug": "False",
            "folder": "data/"
        }
    }
    

    您可以使用[dev][prod] 键访问它以获取您的文件夹:

    >>> config = json.loads(config_data)
    >>> config['[dev]']['folder']
    'dev_data/'
    >>> config['[prod]']['folder']
    'data/'
    

    【讨论】:

    • 这在 configobj 中基本上是可能的。我只是想避免在代码中到处出现if config['environment']['type']=='prod'...
    • 哦,好吧,我不知道。那为什么不直接切换配置文件,一个用于开发,一个用于生产?
    • @cammil 或将config 变量全局设置(初始化时)到您想要的列表,[dev][prod]...
    • @cammil 有用吗?在我的上一条评论中,我的意思是在代码的开头设置 env = config['environment]['type']; config = config[env] - 一行将整个 config-list 重新定义为文件开头指定的环境。
    • 这是一种解决方案,但正如问题中所述,我正在寻找 configobj 中的一种机制,或者一种惯用的方式来处理看似常见的需求
    猜你喜欢
    • 2011-05-01
    • 2021-10-29
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多