接口自动化-YAML
目录
1.YAML介绍
2.YAML安装
3.使用
1.YAML介绍
官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation
YAML 是一种数据序列化语言,用于以人类可读的形式存储信息。它最初代表 “Yet Another Markup Language”,但后来更改为 “YAML Ain’t Markup Language”(YAML 不是一种标记语言),以区别于真正的标记语言。
它类似于 XML 和 JSON 文件,但使用更简洁的语法。
特点:
- YAML 是一种非常简单的基于文本的人类可读的语言,用于在人和计算机之间交换数据。
- YAML 不是一种编程语言,主要用于存储配置信息。
- YAML 的缩进像 Python 的缩进一样优雅。
- YAML 还减少了 JSON 和 XML 文件中的大部分 “噪音” 格式,例如引号、方括号和大括号。
注意:
- YAML 区分大小写。
- YAML 不允许使用制表符(Tab 键)(你按下 Tab 后 YAML 仍能使用,是因为编辑器被配置为按下 Tab 键会插入适当数量的空格)。
- YAML 遵循严格的缩进规则。
YAML 文件的后缀名是 .yaml 或 .yml。
yaml 中支持不同数据类型,但在写法上稍有区别,详见下表:
数据类型 | YAML 写法 | JSON 写法 |
---|---|---|
简单标量值 | key: value | { "key": "value" } |
整数和浮点数 | int_key: 123 float_key: 123.456 | { "int_key": 123, "float_key": 123.456 } |
布尔值 | bool_key: true | { "bool_key": true } |
字符串 | string_key: "This is a string"(""加不加都行) | { "string_key": "This is a string" } |
列表 | list_key: - item1 - item2 - item3 | { "list_key": [ "item1", "item2", "item3" ] } |
映射(字典) | map_key: sub_key1: sub_value1 sub_key2: sub_value2 | { "map_key": { "sub_key1": "sub_value1", "sub_key2": "sub_value2" } } |
嵌套结构 | nested_key: list_key: - item1 - item2 map_key: sub_key1: sub_value1 sub_key2: sub_value2 | { "nested_key": { "list_key": [ "item1", "item2" ], "map_key": { "sub_key1": "sub_value1", "sub_key2": "sub_value2" } } } |
json转yaml工具:
https://www.jashtool.com/json/to-yaml
nesred_key:list_key:- iterm1- iterm2- iterm3map_key:sub_key1: sub_value1sub_key2: sub_value2
2.YAML安装
pip install PyYAML==6.0.1
3.使用
创建一个firstyaml.yml文件:
创建一个 .py 文件
模式字符 | 含义说明 |
---|---|
'r' | 以只读方式打开文件(默认模式) |
'w' | 以写入方式打开文件,若文件已存在则先截断(清空内容) |
'x' | 创建新文件并以写入方式打开,若文件已存在则会报错 |
'a' | 以追加方式打开文件,写入内容会添加到文件末尾(不受当前指针位置影响) |
'b' | 二进制模式(与其他模式结合使用,如 'rb' 表示二进制只读,'wb' 表示二进制写入) |
't' | 文本模式(默认模式,可省略,如 'rt' 等同于 'r') |
'+' | 读写模式(与其他模式结合使用,如 'r+' 表示可读可写,'w+' 表示写入并允许读取) |
代码
import yaml#写入
def wirte_yaml(data):with open("./firstyaml.yml",encoding="utf-8",mode="a+")as f:yaml.safe_dump(data,encoding="utf-8",stream=f)
#读取
def read_yaml():with open("./firstyaml.yml",encoding="utf-8",mode="r")as f:data = yaml.safe_load(f)print(data)#清空文字
def clear_yaml():with open("./firstyaml.yml",encoding="utf-8",mode="w")as f:f.truncate()def test_wirteyaml():data = {"name":"zhangsan","age":"19"}wirte_yaml(data)def test_read_yaml():read_yaml()