本文最后更新于400 天前,其中的信息可能已经过时,如有错误请发送邮件到blue16@email.swu.edu.cn
简介
YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,常用于配置文件。YAML的语法简洁明了,支持多种数据结构,如标量(scalar)、映射(mapping)和序列(sequence)。
我们常用的配置文件:properties、ini、json。
语法格式
下面是一个yaml示例:
server_id: "1"
server_name: "Server1"
server_ip: "192.168.1.1"
network: 100.0
performance: 1000
capabilities:
- server_id: "1"
capability_type: "LLM_CHAT"
location: "LOCAL"
name: "Chat Capability"
- server_id: "2"
capability_type: "IMAGE_OCR"
location: "REMOTE"
name: "OCR Capability"
- 标量(Scalar):
- 单个值,如字符串、数字等。
- 例如:
server_id: "1",server_name: "Server1",network: 100.0。
- 映射(Mapping):
- 键值对的集合。
- 例如:整个文件就是一个映射,包含多个键值对。
- 序列(Sequence):
- 有序的值列表,用
-表示。 - 例如:
capabilities下面的每个能力都是一个映射,这些映射组成一个序列。
- 有序的值列表,用
读写方法
用Python写入:
import yaml
# 定义配置数据
config = {
"server_id": "1",
"server_name": "Server1",
"server_ip": "192.168.1.1",
"network": 100.0,
"performance": 1000,
"capabilities": [
{
"server_id": "1",
"capability_type": "LLM_CHAT",
"location": "LOCAL",
"name": "Chat Capability"
},
{
"server_id": "2",
"capability_type": "IMAGE_OCR",
"location": "REMOTE",
"name": "OCR Capability"
}
]
}
# 将配置数据写入 YAML 文件
with open('config.yaml', 'w') as f:
yaml.dump(config, f, default_flow_style=False)
print("配置文件已保存")
用Python读取:
import yaml
# 从 YAML 文件中读取配置数据
with open('config.yaml', 'r') as f:
config = yaml.safe_load(f)
# 打印配置数据
print(config)
# 访问特定的配置项
server_id = config['server_id']
server_name = config['server_name']
server_ip = config['server_ip']
network = config['network']
performance = config['performance']
capabilities = config['capabilities']
print(f"Server ID: {server_id}")
print(f"Server Name: {server_name}")
print(f"Server IP: {server_ip}")
print(f"Network: {network}")
print(f"Performance: {performance}")
print("Capabilities:")
for capability in capabilities:
print(f" - Server ID: {capability['server_id']}, Type: {capability['capability_type']}, Location: {capability['location']}, Name: {capability['name']}")
如何手搓一个yaml
关键:用空格缩进,不要用Tab。
一些核心:
- 缩进量:通常使用2个或4个空格进行缩进。保持一致的缩进量可以避免解析错误。
- 空格:不要使用制表符(Tab),只使用空格。
- 冒号和空格:键和值之间必须有一个空格。








