目前我像这样加载值(使用configparser)
my_value = config.get("my", "value")
但是随着我的程序随着时间的推移而增长,我发现自己有时会加载很多值。是否有任何“更漂亮”/更好的方式来加载配置文件中的所有值?
也许是在考虑 json 但不太确定?json的一个问题是新手不太容易理解,json中的部分我不能评论?
目前我像这样加载值(使用configparser)
my_value = config.get("my", "value")
但是随着我的程序随着时间的推移而增长,我发现自己有时会加载很多值。是否有任何“更漂亮”/更好的方式来加载配置文件中的所有值?
也许是在考虑 json 但不太确定?json的一个问题是新手不太容易理解,json中的部分我不能评论?
如果您想使用 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)
我建议将配置保存为 YAML 文件中的 Python 字典。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。
简单地使用 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
在我开发的 Java 应用程序中,我在一个名为 Resources 的静态类中有数百个参数,我需要通过 XML 文件使用户可以对其进行配置,而不会破坏现有的应用程序。
我所做的是使用自省来读取 Resources 类的每个属性的名称和类型,然后在 XML 文件中搜索具有相同名称的元素并将值(如果找到)分配给该属性。
在 Python 中应该更容易,因为它是一种动态语言,所以你不需要担心类型安全和强制转换(这不一定是一件好事......)