python yaml使用

yaml规则

YAML有以下基本规则:
1、大小写敏感
2、使用缩进表示层级关系
3、禁止使用tab缩进,只能使用空格键
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
5、使用#表示注释
6、字符串可以不用引号标注

yaml数据结构

  • 对象:键值对的集合(简称 “映射或字典”)
    键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
  • 数组:一组按序排列的值(简称 “序列或列表”)
    数组前加有 “-” 符号,符号与值之间需用空格分隔
  • 纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
    None值可用null可 ~ 表示

使用python操作yaml文件

yaml模块

def yamlDemo():
    yamldata = {
        "demo1": 1,
        "demo2": [1, 2, 3, 4],
        "demo3": {'demo4': 4}
    }
    # 将数据写入yaml文件
    with open('demo_w', 'w', encoding='utf-8') as fp:
        fp.write(yaml.dump(yamldata))

    # 读取文件数据并转换为python对象
    with open('demo_w', 'r', encoding='utf-8') as fp:
        yamldata_r = yaml.load(fp.read(), Loader=yaml.FullLoader)
        print(yamldata_r)

文件数据

demo1: 1
demo2:
- 1
- 2
- 3
- 4
demo3:
  demo4: 4

ruamel.yaml模块

def ruamelDemo():
    yamldata = {
        "demo1": 1,
        "demo2": [1, 2, 3, 4],
        "demo3": {'demo4': 4}
    }
    # 将数据写入yaml文件
    with open('demo_w2', 'w', encoding='utf-8') as fp:
        fp.write(ruamel.yaml.dump(yamldata, Dumper=ruamel.yaml.RoundTripDumper))

    # 读取文件数据并转换为python对象
    with open('demo_w2', 'r', encoding='utf-8') as fp:
        yamldata_r = ruamel.yaml.load(fp.read(), Loader=ruamel.yaml.Loader)
        print(yamldata_r)

文件内容

demo1: 1
demo2:
- 1
- 2
- 3
- 4
demo3:
  demo4: 4