anyconfig 配置文件
anyconfig配置文件读取
anyconfig是一个关于加载 、保存配置文件的python库。
项目的地址:https://github.com/ssato/python-anyconfig
anyconfig文档地址:https://pythonhosted.org/anyconfig/index.html
一、配置文件加载
配置文件加载有两个接口,与json库类似。
angconfig.load
anyconfig.load (path_specs, ac_parser=None, ac_dict=None, ac_template=False, ac_context=None, **options)
- path_specs:从path_specs加载配置文件,可能是文件路径列表,文件对象的匹配字符串 ,类文件对象或者pathlib.Path
- ac_parser:强制解析类型或解析对象
- 其他参数没有必要进行深入研究
加载单个文件
import anyconfig
conf = anyconfig.load("config.yaml")
print(type(conf))
>>> <class 'dict'>
加载多个配置文件
import anyconfig
conf = anyconfig.load([r"config.yaml", r"config01.yaml"])
print(type(conf))
>>> <class 'dict'>
多个文件有相同字段时默认保存最后一次加载的值,即key相同,value为最后一次出现的值。
注意:a["elfin"]、b["elfin"]中的elfin字段不会被覆盖,即冲突的key必须是相同层级关系!
以字符串匹配加载多个配置文件
import anyconfig
conf = anyconfig.load(r"H:\a\b\c\utils\*.yaml")
print(type(conf))
>>> <class 'dict'>
注意这里的路径需要是全局路径,不然会报错!
指定解析文件类型
import anyconfig
conf = anyconfig.load(r"H:\a\b\c\utils\*.yaml", ac_parser="yaml")
参数ac_parser
似乎没有什么作用!
angconfig.loads
anyconfig.loads (content, ac_parser=None, ac_dict=None, ac_template=False, ac_context=None, **options)
- content:配置文件的内容(字符串)
这个loads和json.loads是类似的!即反序列化!与dumps序列化互为逆!
二、序列化配置文件
angconfig.dump
anyconfig.dump (data, out, ac_parser=None, **options)
将字典data保存到out。
anyconfig.dump(conf, "elfin.json")
将前面的配置文件打包到“elfin.json”。
angconfig.dumps
anyconfig.dump (data, ac_parser=None, **options)
data必须是使用loads加载的?
三、打开配置文件
anyconfig.open (path, mode=None, ac_parser=None, **options)
此方法可以传给load方法,即类文件对象!
elfin = anyconfig.open("config.yaml")
print(type(elfin))
>>> <class '_io.TextIOWrapper'>
四、合并字典
a = {
"elfin": 25,
"name": 12
}
b = {
"name": {
"elfin": 45,
"dc": 23
},
"kill": 100
}
anyconfig.merge(a, b)
b没有发生变换,b的字段合并到a中,冲突字段“name”以b为准!
五、架构验证和配置文件发生器
angconfig.validate
anyconfig.validate (data, schema, ac_schema_safe=True, ac_schema_errors=False, **options)
conf = anyconfig.load(r"H:\a\b\c\utils\*.yaml",
ac_parser="yaml")
conf1 = anyconfig.load("elfin.json")
print(anyconfig.validate(conf, conf1))
>>> (True, '')
angconfig.gen_schema
scm4 = anyconfig.gen_schema(conf)
scm4_s = anyconfig.dumps(scm4, "json") # 得到json字符串
六、支持的格式
Format | Type | Requirement | Notes |
---|---|---|---|
JSON | json | json (standard lib) or simplejson [4] |
Enabled by default. |
Ini-like | ini | configparser (standard lib) |
Ditto. |
Java properties [5] | properties | None (native implementation with standard lib) | Ditto. |
XML | xml | lxml [6] or ElementTree |
Ditto. |
YAML | yaml | PyYAML [7] |
Enabled automatically if the left requirement is satisfied. |
ConifgObj | configobj | configobj [8] |
Ditto. |
MessagePack | msgpack | msgpack-python [9] |
Ditto. |
TOML | toml | toml [10] |
Ditto. |
BSON | bson | bson in pymongo [11] |
Ditto. |
完!
清澈的爱,只为中国