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')