一、 介绍
MMEngine 实现了抽象的配置类(Config),为用户提供统一的配置访问接口。
配置类能够支持不同格式的配置文件,包括 python,json,yaml,
用户可以根据需求选择自己偏好的格式。
配置类提供了类似字典或者 Python 对象属性的访问接口,用户可以十分自然地进行配置字段的读取和修改。
为了方便算法框架管理配置文件,配置类也实现了一些特性,例如配置文件的字段继承等。
二、 配置文件读取
配置类提供了统一的接口 Config.fromfile(),
来读取和解析配置文件。
- python格式配置文件:
perfon_cfg.py
python
# Python 格式
name = "SHUAI"
addr = "Shanghai"
interest = ["food","travel"]
computer = dict(brand='dell', gpu="mx350")
- yaml格式配置文件:
perfon_cfg.yaml
yaml
name: "SHUAI"
addr: "Shanghai"
interest:
- food
- travel
computer:
brand: "dell"
gpu: mx350
- json格式配置文件:
perfon_cfg.json
json
{
"name": "SHUAI",
"addr": "Shanghai",
"interest": ["food", "travel"],
"computer": {"brand": "dell", "gpu": "mx350"}
}
- 用
mmengine.config.Config.fromfile
读取py,yaml,json
三种格式的配置信息
python
from mmengine.config import Config
# 从py中读取
import person_cfg as cfg_py
print(cfg_py.name)
print(cfg_py.addr)
print(cfg_py.interest)
print(cfg_py.computer)
# 从yaml中读取
cfg_yaml = Config.fromfile('person_cfg.yaml')
print(cfg_yaml)
# 从json中读取
cfg_json = Config.fromfile('person_cfg.json')
print(cfg_json)
三、 配置文件的使用
通过读取配置文件来初始化配置对象后,就可以像使用普通字典或者 Python 类一样来使用这个变量了。提供了两种访问接口,即类似字典的接口 cfg['key']
或者类似 Python 对象属性的接口 cfg.key
。这两种接口都支持读写。
python
### 使用 ###
print('------')
print(cfg_yaml.name)
print(cfg_yaml.addr)
print(cfg_yaml.interest)
print(cfg_yaml.computer)
print('------')
print(cfg_json["name"])
print(cfg_json["addr"])
print(cfg_json["interest"])
print(cfg_json["computer"])
注意,配置文件中定义的嵌套字段(即类似字典的字段),在 Config 中会将其转化为 ConfigDict 类,该类继承了 Python 内置字典类型的全部接口,同时也支持以对象属性的方式访问数据。
附上完整代码:
python
# 1. person_cfg.py中代码
name = "SHUAI"
addr = "Shanghai"
interest = ["food","travel"]
computer = dict(brand='dell', gpu="mx350")
# 2. person_cfg.json中代码
{
"name": "SHUAI",
"addr": "Shanghai",
"interest": ["food", "travel"],
"computer": {"brand": "dell", "gpu": "mx350"}
}
# 3. person_cfg.yaml中代码
name: "SHUAI"
addr: "Shanghai"
interest:
- food
- travel
computer:
brand: "dell"
gpu: mx350
# 4. config.py中代码
from mmengine.config import Config
### 读取 ###
# 从py中读取
import person_cfg as cfg_py
print(cfg_py.name)
print(cfg_py.addr)
print(cfg_py.interest)
print(cfg_py.computer)
# 从yaml中读取
cfg_yaml = Config.fromfile('person_cfg.yaml')
print(cfg_yaml)
# 从json中读取
cfg_json = Config.fromfile('person_cfg.json')
print(cfg_json)
### 使用 ###
print('------')
print(cfg_yaml.name)
print(cfg_yaml.addr)
print(cfg_yaml.interest)
print(cfg_yaml.computer)
print('------')
print(cfg_json["name"])
print(cfg_json["addr"])
print(cfg_json["interest"])
print(cfg_json["computer"])