目前我加载的值如此(使用configparser)
my_value = config.get("my", "value")
但随着时间的推移,我发现自己有时会加载很多值。是否有任何“更漂亮”/更好的方法来加载配置文件中的所有值?
或许想到了json但不是很确定? json的一个问题是新手不容易理解,我不能在json中评论这些部分吗?
答案 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中它应该更容易,因为它是一种动态语言,所以你不需要打扰类型安全和强制转换(这不一定是好事......)