一 简介
YAML是一种简洁的非标记语言
特点
- 大小写敏感
- 使用缩进表示层级关系
- 禁止使用tab缩进,只能使用空格键
- 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
- 使用#表示注释
- 字符串可以不用引号标注
支持的数据结构
对象:键值对的集合,又称为映射 或者 哈希 或者 字典
# YAML表示
age : 12
name : huang
# 对应的Json表示
{'age':12,'name':'huang'}
数组: 一组按次序排列的值,又称为序列 或者 列表
使用连字符(-)表示:
# YAML表示
- a
- b
- 12
# 对应Json表示
['a','b',12]
纯量: 单个的。不可再分的值
冒号和短中横线后面的值必须先空一个位置,在添加值
二 数据嵌套
map嵌套map
hobby:
java: 1
python: 2
map嵌套list
hobby:
- c
- java
- python
list嵌套list
-
- java
- python
- c
-
- a
- b
- c
list嵌套map
-
id: 1
name: zhangsan
-
age: 17
sex: man
三 其他用法
1 锚点与引用
name: &a yaml
book: *a
books:
- java
- *a
- python
## 输出结果
# {'name': 'yaml', 'book': 'yaml', 'books': ['java', 'yaml', 'python']}
# YAML
human: &base # 添加名为 base 的锚点
body: 1
hair: 999
singer:
<<: *base # 引用 base 锚点,实例化时会自动展开
skill: sing # 添加额外的属性
programer:
<<: *base # 引用 base 锚点,实例化时会自动展开
hair: 6 # 覆写 base 中的属性
skill: code # 添加额外的属性
// JSON
"human": { "body": 1, "hair": 999 },
"singer": { "body": 1, "hair": 999, "skill": "sing" },
"programer": { "body": 1, "hair": 6, "skill": "code" }
存量,数据类型约定
1 字符串使用双引号或者不适用双引号
2 布尔值 false 或者 true
3 数字
12 #整数
014 # 八进制整数
0xC #十六进制整数
13.4 #浮点数
1.2e+34 #指数
.inf空值 #无穷大
4 空值:null 或者~表示
五 python解析yml文件
安装 第三方模块
pip install PyYaml
选择一种解析的方式 fp 为文件句柄
yaml.load(fp, Loader=yaml.SafeLoader)
yaml.safe_load(fp)
yaml.unsafe_load(fp)
yaml.full_load(fp)