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, cfg
        return [f"{parent} = {str(cfg)}"]
    if OmegaConf.is_list(cfg):
        items = enumerate(cfg)
    elif OmegaConf.is_config(cfg):
        items = cfg.items()
    else:
        raise NotImplementedError
    string = []
    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_impl
    return 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_default
    raise MissingMandatoryValue("Missing mandatory value: $FULL_KEY")
omegaconf.errors.MissingMandatoryValue: Missing mandatory value: abc
    full_key: abc
    object_type=dict

可以看到,在OmegaConf中,如果键值的value是missing的状态,访问此键对应的值会报错;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以和你分享一些关于Spring Boot的学习笔记。 1. Spring Boot是什么? Spring Boot是一个基于Spring框架的快速开发框架,它能够帮助开发者快速搭建Spring项目,简化了Spring应用开发的繁琐过程,提高了开发效率。 2. Spring Boot的优点有哪些? Spring Boot的优点有很多,其中包括: - 简化了Spring应用的开发,提高了开发效率; - 集成了很多常用的第三方库,减少了依赖管理的工作; - 自动化配置,减少了配置文件的编写工作; - 内嵌了Tomcat等Web容器,使得应用的部署更加便捷; - 提供了Actuator等模块,使得应用的监控和管理更加便捷。 3. Spring Boot的核心注解有哪些? Spring Boot的核心注解包括: - @SpringBootApplication:标注在启动类上,代表这是一个Spring Boot应用; - @Controller:标注在控制器类上,处理HTTP请求; - @Service:标注在服务类上,用于处理业务逻辑; - @Repository:标注在数据访问类上,用于数据库访问; - @Configuration:标注在配置类上,用于配置Spring应用上下文。 4. Spring Boot的配置文件有哪些? Spring Boot的配置文件包括: - application.properties:基于Key-Value的属性文件; - application.yml:基于YAML语法的配置文件。 5. 如何使用Spring Boot集成数据库? 使用Spring Boot集成数据库需要完成以下几个步骤: - 在pom.xml中添加相关数据库依赖; - 配置数据源和JPA/Hibernate等相关配置; - 编写实体类和DAO层代码。 以上就是一些关于Spring Boot的学习笔记,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值