YAML文件

发布于:2025-08-08 ⋅ 阅读:(10) ⋅ 点赞:(0)

简介:

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        # 锚点包含的配置1
  retries: 3         # 锚点包含的配置2

service:
  <<: *defaults      # 用*defaults引用锚点内容,将defaults的配置合并到service中
  port: 8080         # service自身的额外配置

上述代码等同于

service:
  timeout: 30
  retries: 3
  port: 8080

合并键:

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

合并多个引用:

common: &common
  log: true

server: &server
  port: 8080

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

等价于:

app:
  log: true
  port: 8080
  name: 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')


网站公告

今日签到

点亮在社区的每一天
去签到