YAML(Yet Another Markup Language 或 YAML Ain’t Markup Language) 是一种轻量级数据序列化格式,常用来配置文件、数据交换和表示结构化数据。它以人类可读性为设计目标,语法简洁直观,非常适合配置文件的用途。
YAML 的功能和用途
-
配置文件:
- YAML 被广泛用于保存应用程序、服务、容器等的配置,例如:
- Docker Compose 配置(
docker-compose.yml
) - Kubernetes 配置(Pod、Service 等)
- ML 模型超参数设置
- Docker Compose 配置(
- 示例:
server: host: localhost port: 8080 database: user: admin password: secret name: example_db
- YAML 被广泛用于保存应用程序、服务、容器等的配置,例如:
-
数据序列化:
- YAML 可用于将复杂的数据结构序列化为字符串,便于存储或传输,然后再反序列化为程序中的数据。
- 适合多层嵌套的字典、列表、字符串、数字等数据。
-
替代 JSON 或 XML:
- 与 JSON 和 XML 类似,YAML 也是一种数据格式,但更易于手写和阅读。
- 对比:
- YAML 的可读性 > JSON > XML
- YAML 和 JSON 更适合配置,而 XML 更常用于文档和协议。
-
跨语言兼容:
- 支持多种编程语言(Python、Java、C++ 等)解析和生成 YAML 格式,常用库包括 PyYAML、ruamel.yaml 等。
YAML 的基本语法
-
键值对:
- 使用冒号分隔键和值:
name: John age: 30
- 使用冒号分隔键和值:
-
层级结构:
- 使用缩进表示层级(空格,不能使用 Tab):
person: name: John age: 30
- 使用缩进表示层级(空格,不能使用 Tab):
-
列表:
- 使用短横线表示列表项:
fruits: - apple - banana - orange
- 使用短横线表示列表项:
-
嵌套结构:
- 支持嵌套字典和列表:
environment: dev: url: http://localhost:8080 debug: true prod: url: http://example.com debug: false
- 支持嵌套字典和列表:
-
多行字符串:
- 使用
|
或>
表示多行文本:description: | This is a long description spanning multiple lines.
- 使用
-
数据类型:
- 支持字符串、数字、布尔值、日期等:
name: "John" age: 30 active: true birthday: 2000-01-01
- 支持字符串、数字、布尔值、日期等:
YAML 的优势
- 易读性高:语法直观,适合人类直接编辑。
- 简单灵活:支持复杂的数据结构(如嵌套字典、列表等)。
- 广泛使用:被许多现代工具(如 Docker、Kubernetes)用作标准配置文件格式。
YAML 使用的典型场景
-
Docker Compose 文件:
version: "3.9" services: web: image: nginx ports: - "80:80" db: image: mysql environment: MYSQL_ROOT_PASSWORD: example
-
Kubernetes 配置:
apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: nginx image: nginx:1.14.2
-
机器学习超参数配置:
model: type: bert hidden_size: 768 num_layers: 12 training: batch_size: 32 learning_rate: 0.001 epochs: 10
总结
YAML 是一种简单而强大的数据格式,主要用于配置文件和数据序列化。它的直观语法和高可读性使其在现代软件开发中非常流行。如果需要更具体的 YAML 使用示例或解析方式,可以告诉我!