anyconfig 配置文件

anyconfig配置文件读取


作者:elfin   参考资料来源:anyconfig


anyconfig是一个关于加载 、保存配置文件的python库。

项目的地址:https://github.com/ssato/python-anyconfig

anyconfig文档地址:https://pythonhosted.org/anyconfig/index.html


Top --- Bottom

一、配置文件加载

配置文件加载有两个接口,与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序列化互为逆!


Top --- Bottom

二、序列化配置文件

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加载的?


Top --- Bottom

三、打开配置文件

anyconfig.open (path, mode=None, ac_parser=None, **options)

此方法可以传给load方法,即类文件对象!

elfin = anyconfig.open("config.yaml")
print(type(elfin))
>>> <class '_io.TextIOWrapper'>

Top --- Bottom

四、合并字典

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字符串

Top --- Bottom

六、支持的格式

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.

Top --- Bottom

完!

posted @ 2021-11-26 09:44  巴蜀秀才  阅读(415)  评论(0编辑  收藏  举报