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

YAML文件

简介:

YAML是一种数据序列化格式,常用于配置文件、数据交换和存储。其设计目标是简洁易读,同时支持复杂数据结构。

语法:

  • 缩进:使用空格(禁止用制表符)表示层级关系,同一层级缩进必须一致。
  • 键值对:用冒号 : 分隔键和值,值可以是标量(字符串、数字等)、列表或嵌套结构。
  • 注释:以 # 开头,仅支持单行注释。
  • 字符串:可省略引号,但含特殊字符时需用单引号 ' 或双引号 "

YAML文件数据类型

普通数据类型:

ymal:

string: "Hello, YAML"  
number: 42  
boolean: true  
null_value: null  

JSON:

{"string": "Hello, YAML","number": 42,"boolean": true,"null_value": null
}

列表:

YMAL:

fruits:  - Apple  - Banana  - Orange  

JSON:

{"fruits": ["Apple","Banana","Orange"]
}

字典:

YMAL:

person:  name: "Alice"  age: 30  skills:  - Python  - YAML  

JSON:

{"person": {"name": "Alice","age": 30,"skills": ["Python","YAML"]}
}

多行字符串:

description: |  This is a  multiline  string.  
{"description": "This is a  \nmultiline  \nstring.  \n"
}

锚点引用合并键

  • 锚点(&):用于定义一个可复用的内容块,相当于给这段内容起一个 “别名”。
  • 引用(*):用于引用之前通过锚点定义的内容块,直接复用其所有配置。
defaults: &defaults  # 用&defaults定义锚点,将defaults下的配置标记为可复用timeout: 30        # 锚点包含的配置1retries: 3         # 锚点包含的配置2service:<<: *defaults      # 用*defaults引用锚点内容,将defaults的配置合并到service中port: 8080         # service自身的额外配置

上述代码等同于

service:timeout: 30retries: 3port: 8080

合并键:

  • 作用:将一个或多个映射(map)的内容合并到当前映射中,通常与锚点配合使用,实现配置复用。
  • 支持同时合并多个映射,用列表形式传入多个引用。

合并多个引用:

common: &commonlog: trueserver: &serverport: 8080app:<<: [*common, *server]  # 同时合并common和server的配置name: myapp             # 新增app特有的配置

等价于:

app:log: trueport: 8080name: myapp

读取和写入YMAL文件

安装ymal库:

pip install PyYAML==6.0.1
import yaml
#追加写⼊
def write_yaml(filename, data):with open(filename, encoding="utf-8", mode="a+") as f:yaml.safe_dump(data, stream=f)
#读取
def read_yaml(filename, key):with open(filename, encoding="utf-8", mode="r") as f:data = yaml.safe_load(f)return data[key]
#清空
def clear_yaml(filename):with open(filename, encoding="utf-8", mode="w") as f:f.truncate()def test_yml():
#写⼊yaml⽂件data = {"str":"12345"}write_yaml('test.yml',data)
#读取yaml⽂件ret = read_yaml('test.yml',"str")print("ret:", ret)
#清空yaml⽂件clear_yaml('test.yml')

http://www.lryc.cn/news/609461.html

相关文章:

  • Vue Router快速入门
  • 高精度实战:YOLOv11交叉口目标行为全透视——轨迹追踪×热力图×滞留分析(附完整代码)
  • 深度学习TR3周:Pytorch复现Transformer
  • 第三阶段—8天Python从入门到精通【itheima】-143节(pyspark实战——数据计算——flatmap方法)
  • 大型语言模型落地应用全景指南:微调、提示工程、多模态与企业级解决方案
  • Perl 面向对象编程深入解析
  • 如何计算卷积层的计算量?从参数到公式的详细推导
  • PPT自动化 python-pptx - 11 : 备注页 (Notes Slides)
  • JUCE VST AI 开源
  • 进程生命周期管理:从创建到终止的完整逻辑
  • 解锁高并发LLM推理:动态批处理、令牌流和使用vLLM的KV缓存秘密
  • Oracle ASH的手册
  • Git简易教程
  • javacc实现简单SQL解析器
  • JSqlParser学习笔记 快速使用JSqlParser
  • [特殊字符] Ubuntu 下 MySQL 离线部署教学(含手动步骤与一键脚本)
  • 虚拟机中查看和修改文件权限
  • SelectDB:新一代实时数仓的核心引擎与应用实战
  • Python day34
  • Druid学习笔记 03、Druid的AstNode类详解与其他产品测试体验
  • 阿里云-通义灵码:解锁云原生智能开发新能力,让云开发更“灵”~
  • 【Linux操作系统】简学深悟启示录:进程初步
  • [spring-cloud: @LoadBalanced @LoadBalancerClient]-源码分析
  • DevOps平台大比拼:Gitee、Jenkins与CircleCI如何选型?
  • 集成电路学习:什么是BLE Mesh低功耗蓝牙网络
  • AI产品经理手册(Ch6-8)AI Product Manager‘s Handbook学习笔记
  • Cursor国产平替重磅开源!离线研发AI助手,拒绝云端受制于人
  • 8位以及32位的MCU如何进行选择?
  • 苹果iOS应用ipa文件安装之前?为什么需要签名?不签名能用么?
  • Memcached 缓存详解及常见问题解决方案