当前位置: 首页 > news >正文

Omegaconf基础教程

支持用yaml配置文件、对象、CLI参数。

安装:pip install omegaconf

导包

from omegaconf import OmegaConf

构建OmegaConf类

构建一个空的类

conf = OmegaConf.create() # {}

将Python字典转成OmegaConf类

conf = OmegaConf.create({"a": 1, "b": {"c": 2}})
"""
a: 1
b:c: 2
"""

将Python列表转成OmegaConf类

conf = OmegaConf.create([1, 2, {"a": [5, 6]}])  
print(OmegaConf.to_yaml(conf))  
print(type(conf))"""
- 1
- 2
- a:- 5- 6<class 'omegaconf.listconfig.ListConfig'>
"""

从YAML文件中加载OmegaConf类

conf = OmegaConf.load("a.yaml")

从命令行加载OmegaConf类

conf = OmegaConf.from_cli()# 外面的命令行代码:  
# %run xxx.py server.port=8080 log.level=debug

从dataclass类中解析OmegaConf类

dataclass类

from dataclasses import dataclass  @dataclass  
class MyConfig:  port: int = 80  # port of server  host: str = "localhost"  conf = OmegaConf.structured(MyConfig(port=443))  
print(OmegaConf.to_yaml(conf))"""
port: 443
host: localhost
"""

其他基础操作

???占位符

yaml

server:port: 8080
log:level: debugfile: ??? # ???的作用,是占位符,用于表示一个未知的值
users:
- name: admin
- name: user

直接获取???会报错
需要先赋值再获取

conf = OmegaConf.load("a.yaml")conf.log.file = "log.log"  
print(OmegaConf.to_yaml(conf))

修改原来的值

原来yaml里面有这个配置,想修改,直接赋值即可

# 修改原来的值  
conf.server.port = 80

新增值

前提是有server这个前缀字段

# 新增一个值  
conf.server.host = "0.0.0.0"

如果增加的是多个前缀,且文件中都没有就会报错(server没有会报错,如果是conf.host就没事)

# 但如果直接增加一个不存在的值,就会报错  
conf.a.b = 1 # 会报错,因为没有a,所以无法增加b

使用update方法,可以增加一个不存在的值

# 使用update方法,可以增加一个不存在的值  
OmegaConf.update(conf, "a.b.c", 1, force_add=True)

合并配置对象

# merge方法可以合并两个配置对象  
conf1 = OmegaConf.create({"aaa": 1, "aab": 2})  
conf2 = OmegaConf.create({"a": 1, "b": 2})  
merged_conf = OmegaConf.merge(conf1, conf2)

存入yaml文件

with open("merged.yaml", "w") as f:  OmegaConf.save(merged_conf, f)

值的引用

通过$实现
yaml文件:

server:  host: localhost  port: 80  client:  url: http://${server.host}:${server.port}/  server_port: 80  description: Client of ${.url}

原生yaml是不支持引用的(某个值引用同个yaml中的其他值)的

import yaml  
import pprint  pp = pprint.PrettyPrinter(indent=4)  # 打印时,缩进4个空格  
with open("b.yaml", "r") as f:  conf = yaml.safe_load(f)# 原生yaml是不支持引用的(某个值引用同个yaml中的其他值)的  
conf["client"]["url"] # 'http://${server.host}:${server.port}/'

Omegaconf解析可以支持引用,但是是懒加载,直接输出整个文件并不会加载

# 用 OmegaConf 解析 yaml 文件  
from omegaconf import OmegaConf  with open("b.yaml", "r") as f:  conf = OmegaConf.load(f)  print(OmegaConf.to_yaml(conf)) # 这里还没有解析,是lazy loading
"""
server:host: localhostport: 80
client:url: http://${server.host}:${server.port}/server_port: 80description: Client of ${.url}
"""

单独输出引用的字段,会加载引用print(conf.client.url) # 'http://localhost:80/'

# 使用resolve方法,可以解析引用  
OmegaConf.resolve(conf)  # 递归地解析所有引用print(OmegaConf.to_yaml(conf)) # 现在已经解析了
http://www.jsqmd.com/news/749803/

相关文章:

  • Sun01 - STM32智能编译烧录助手
  • 使用Taotoken后API调用延迟与稳定性体感观察记录
  • 基于MCP协议构建NuGet文档AI查询工具:原理、实现与集成指南
  • GPT-SoVITS终极指南:1分钟语音克隆,快速打造专属AI语音助手
  • 瑞祥商联卡变现平台推荐:高效、安全、零手续费! - 团团收购物卡回收
  • Residuum:轻量级任务调度与状态管理框架的设计与实践
  • 从拧电阻到看数码管:蓝桥杯NE555频率测量项目全流程调试心得与问题排查
  • Hydra基础教程
  • DownKyi:3步解决B站视频下载难题,打造个人专属高清内容库
  • 大语言模型在数学推理与翻译任务中的表现与优化
  • BepInEx:Unity游戏插件框架终极指南 - 5分钟快速上手
  • YAML基础教程
  • Gazebo模型贴图变形?手把手教你搞定UV映射和纹理比例问题(以长方体为例)
  • 别再问板厂要什么文件了!AD21导出Gerber保姆级教程,附每个文件用途详解
  • 成都无缝钢管|流体管|结构管|锅炉管|碳素无缝管|合金无缝管|四川批发无缝管-四川盛世钢联国际贸易有限公司 - 四川盛世钢联营销中心
  • 个人整理的超全C++ 八股文(全是干货)
  • 崩坏星穹铁道自动化助手终极指南:三月七小助手的完整使用教程
  • Cursor额度实时监控:VS Code扩展开发实战与本地数据读取方案
  • CHAOS故障注入系统:提升计算系统可靠性的关键技术
  • 如何让Windows文件管理更智能:FileMeta完整指南
  • 别再死记硬背状态转移方程了!用‘数字三角形’带你彻底搞懂动态规划的自底向上思想
  • 怎样高效管理音乐元数据:163MusicLyrics智能整理工具实战解析
  • 术语俗话 --- POSIX 就是 Unix 世界的普通话,大家说同一种语言就能互相理解。
  • AI-Radar-Pulse:构建自动化AI信息追踪系统,高效获取前沿技术动态
  • WarcraftHelper终极配置指南:魔兽争霸3全版本兼容性修复与优化方案
  • Agent 的核心秘密 —— 智能来自模型,能力来自 Harness
  • 基于MCP与RAG技术,一键为网站部署本地化AI聊天机器人
  • NCMconverter终极指南:免费解锁加密音乐文件的完整教程
  • 3步解锁QQ音乐加密文件:macOS音频格式转换终极指南
  • PromptBridge技术:实现大语言模型提示词跨平台迁移