本文主要是介绍Yaml的学习笔记(OmegaConf),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. 安装yaml
ruamel
安装:
conda install ruamel.yaml
omegaconf
安装:Omegaconf - Releases
2. Yaml格式说明
2.1 数据类型(yaml
无强制类型限定)
Python中使用yaml
无法实现对数据类型的强制限定,(在原生yaml中可以使用类型强制转换“!!float 123”,不过ruamel.yaml
不支持此语法);
在这里我们使用!tag
方式来实现来数据类型的声明;
3. 读取yaml
# 读取yaml文件
with open(os.path.join(records, "cfg.yaml"), "r", encoding="utf-8") as yaml_file:yaml_dict = yaml.round_trip_load(yaml_file)# 使用OmegaConf载入yaml文件
dict_config = OmegaConf.load("cfg.yaml")
4. 写入yaml
# 写入到yaml文件
with open(os.path.join(records, "cfg.yaml"), "w", encoding="utf-8") as f:yaml.dump(dictionary, f)
5. OmegaConf笔记
5.1 新建字典 [doc]
conf = OmegaConf.create()
5.2 更新字典
OmegaConf.merge()
≈ \approx ≈ dict.update()
OmegaConf.merge()
的作用跟dict.update()
类似,不过dict.update()
函数名的意义会更加明确一些,实际上:OmegaConf.merge()
也是以最后输入的config为配置值的最终设置,相当于“后来为先”原则,即时间最顺序最后一个config优先级最高。
Note
OmegaConf.merge()
的更新还具有顺序保持的特点,即在参数顺序上时依照“先来为序”的原则,会按照config1的顺序对参数进行排列。
5.3 实现get_leaves_str()
在实现get_leaves_str()时,Jasha在Dsicussions给我们提供了这样一个测试样例:
def get_leaves_no_check_misses(cfg, parent=None):if not OmegaConf.is_config(cfg):assert parent, cfgreturn [f"{parent} = {str(cfg)}"]if OmegaConf.is_list(cfg):items = enumerate(cfg)elif OmegaConf.is_config(cfg):items = cfg.items()else:raise NotImplementedErrorstring = []parent = f"{parent}." if parent else ''for k, v in items:string += get_leaves_no_check_misses(v, f"{parent}{k}")return string# Test case from GitHub
conf = OmegaConf.create({'abc': '???'})
print("\n".join(get_leaves_no_check_misses(conf)))
>>>
File "/home/songyuc/software/python/anaconda/anaconda3/envs/conda-general/lib/python3.10/site-packages/omegaconf/dictconfig.py", line 445, in _get_implreturn self._resolve_with_default(
File "/home/songyuc/software/python/anaconda/anaconda3/envs/conda-general/lib/python3.10/site-packages/omegaconf/basecontainer.py", line 63, in _resolve_with_defaultraise MissingMandatoryValue("Missing mandatory value: $FULL_KEY")
omegaconf.errors.MissingMandatoryValue: Missing mandatory value: abcfull_key: abcobject_type=dict
可以看到,在OmegaConf
中,如果键值的value是missing的状态,访问此键对应的值会报错;
这篇关于Yaml的学习笔记(OmegaConf)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!