在python中加载配置值的更智能方法?

时间:2013-06-12 07:42:55

标签: python

目前我加载的值如此(使用configparser)

my_value = config.get("my", "value")

但随着时间的推移,我发现自己有时会加载很多值。是否有任何“更漂亮”/更好的方法来加载配置文件中的所有值?

或许想到了json但不是很确定? json的一个问题是新手不容易理解,我不能在json中评论这些部分吗?

4 个答案:

答案 0 :(得分:1)

如果要使用ConfigParser,可以将配置值存储在由[section name][item name]索引的字典中,并加载它们而无需显式指定每个变量名称:

import ConfigParser
from pprint import pprint
cfg = ConfigParser.ConfigParser()
cfg.read('config.cfg')
CONFIG_DATA = {}
for section_name in cfg.sections():
    CONFIG_DATA[section_name] = {}
    for item_name in cfg.items(section_name):
        CONFIG_DATA[section_name][item_name] = cfg.get(section_name, item_name)
pprint(CONFIG_DATA)

答案 1 :(得分:0)

我建议将配置保存为YAML文件中的Python dict。 YAML是人类可读的,支持在一行开头带#符号的注释。但是,它不支持块注释。

import yaml
conf = {"name":"john", "password":"asdf"}
with open("conf.yaml", "w") as f:
    yaml.dump(conf, f)

会给你一个文件conf.yaml,内容为:

{name: john, password: asdf}

然后您可以阅读:

import yaml
with open("conf.yaml", "r") as f:
    conf = yaml.load(f)

如果您需要阻止评论,可以考虑使用XML。

答案 2 :(得分:0)

如何简单地使用Python模块?

您可以拥有一个config.py文件,其中包括以下内容:

# config.py
MY = "value"
DB = "mysql://..."

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
    },
    'handlers': {
    },
    'loggers': {
    }
}

然后在需要时导入该文件:

import config
import logging.config

logging.config.dictConfig(config.LOGGING)
print config.MY

答案 3 :(得分:-1)

在我开发的Java应用程序中,我在名为Resources的静态类中有数百个参数,我需要用户通过XML文件对其进行配置,而不会破坏现有的应用程序。

我所做的是使用内省来读取Resources类的每个属性的名称和类型,然后在XML文件中搜索具有相同名称的元素,并将值(如果找到)分配给该属性。

在Python中它应该更容易,因为它是一种动态语言,所以你不需要打扰类型安全和强制转换(这不一定是好事......)