Python_PyYaml模块的使用

YAML是一种比XML和JSON更轻的文件格式,也更简单更强大,它可以通过缩进来表示结构。

模块安装

pip install pyyaml   
# 如果是py2,使用 pip install yaml

PyYaml的简单使用

pyyaml就像json、pickle一样,load、dump就足够我们使用了。

将yaml格式数据转换成dict格式

比如,有如下格式的yaml文件

- test:
    id: login
    request:
        url: XXX
        method: POST


- test:
    id: get_user_info
    request:
        url: XXX
        method: GET
    validate:
        - eq:
            - [code, 0]
            - [mail, 33@qq.com]

使用 safe_load 方法转换成dict格式数据

import yaml

with open("./test.yml") as f:
    msg = f.read()

obj = yaml.safe_load(msg)
print(obj)

执行结果如下:

将dict格式数据转换成yaml格式

import yaml

msg = [{'test': {'id': 'login', 'request': {'url': 'XXX', 'method': 'POST'}}},
       {'test': {'id': 'get_user_info', 'request': {'url': 'XXX', 'method': 'GET'}, 'validate': [{'eq': [['code', 0], ['mail', '33@qq.com']]}]}}]

yaml_msg = yaml.safe_dump(msg)
print(yaml_msg)

执行结果如下:

YAML的语法规则和数据结构

YAML 基本语法规则

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进时不允许使用Tab键,只允许使用空格。
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  5. # 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
  6. 列表里的项用"-"来代表,字典里的键值对用":"分隔

YAML 支持的数据结构有3种

  1. 对象:键值对的集合
  2. 数组:一组按次序排列的值,序列(sequence) 或 列表(list)
  3. 纯量(scalars):单个的、不可再分的值,如:字符串、布尔值、整数、浮点数、Null、时间、日期

数据结构示例:

str: "Big River"    # 字符串
int: 1548           # 整数
float: 3.14         # 浮点数
boolean: true       # 布尔值
None: null          # 也可以用 ~ 号来表示 null
time: '2019-11-20T08:47:46.576701+00:00'       # 时间,ISO8601
date: 2019-11-20 16:47:46.576702                # 日期

操作代码:

import yaml

with open("./test.yml", encoding="utf-8") as f:
    msg = f.read()

obj = yaml.safe_load(msg)
print(obj)

执行结果:

其他语法规则

1. 字符串可以不需要加引号

2. & 和 * 可用于定义和引用变量

3. !! 用于强制转换

4. 3个“-”  用于将一个yaml文件分成多段,这样可以将多个文档写在一个文件中。读取多段yaml格式用 safe_load_all()方法,返回值是可迭代对象。

yaml文件内容如下:

int: 123
str: !!str 123
---
int: 456
str: abc

代码如下:

import yaml

with open("./test.yml", encoding="utf-8") as f:
    msg = f.read()

objs = yaml.safe_load_all(msg)
print(objs)
for obj in objs:
    print(obj)

 执行结果如下:

原文地址:https://www.cnblogs.com/testlearn/p/14817144.html