yaml文件
yaml文件格式
yaml简介
- yaml是一种用来写配置文件的序列化语言,跟json有些像,yaml又称作json的超集,yaml的设计则是为了友好可读性,主要用于配置信息的书写,而json设计的目的则是为了简单和通用,主要用于存储数据和应用层数据通信使用。
语法
数据类型
- yaml主要有三种类型的数据原语,基于这三种数据原语可以组合出任何数据结构。
| 名称 | 说明 | 官方表达 |
|---|---|---|
| Maps | 对象,键值对 | mappings (hashes/dictionaries) |
| Lists | 数组 | sequences (arrays/lists) |
| Scales | 纯量,不可分割的值 | scalars (strings/numbers) |
对象
animal: pets |
数组
- Cat |
纯量
- 数值类型:字符串、整数、浮点数
number: 12.30 |
- 布尔值
isSet: true |
- Null
parent: ~ |
- 时间
# 采用 ISO8601 格式 |
- 日期
# 采用复合 iso8601 格式的年、月、日表示 |
字符串详解
# 字符串默认不使用引号表示。 |
数据类型转换
- YAML 允许使用两个感叹号,强制转换数据类型。
e: !!str 123 |
语法格式
- yaml文件大小写敏感
- 不允许使用用tab制表符号代替空格
- 使用缩进表示层级关系
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- 字符串默认不使用引号表示
- 单引号之中如果还有单引号,必须连续使用两个单引号转义
'labor''s day'
符号系统
| 符号 | 符号 | 说明 |
|---|---|---|
- |
破折号和空格 | Lists集合 |
: |
冒号和空格 | Maps键值对 |
# |
井号 | 注释,从这个字符一直到行尾,都会被解析器忽略 |
--- |
三个破折号 | 文档内容分隔线(多用于文档开始的地方) |
... |
三个冒号 | 表示文档的结束 |
&*<< |
在-或:后加上&用来建立锚点(defaults)使用 <<: *锚点名直接将锚点数据插入到当前的数据中*锚点名用来引用锚点。两者成对表达,像定义变量a,再引用变量a的关系,是一种重复项的替换。 |
|
~ |
波浪 | null |
!! |
双感叹号 | 表示强制转换数据类型e: !!str 123 |
| |
保留多行文本(保留换行符) | |
| > | 将多行拼接为一行 |
引用
- 锚点
&:建立锚点(defaults),别名*:用来引用锚点,<<表示合并到当前数据。
defaults: |
python解析yaml
- 更多操作可参考pyyaml官方文档
| 操作 | 说明 |
|---|---|
| 安装 | pip3 install pyyaml |
| load | yaml.load()yaml.safe_load(YAML字符串或文件句柄) |
| dump | yaml.dump(字典):默认为flow流格式,即字典{b’: {‘c’: 3, ‘d’: 4}},会被转为b: {c: 3, d: 4}形式,可以使用default_flow_style=False关闭流模式 |
- 由于yaml.load()支持原生Python对象,不安全,建议使用yaml.safe_load()
示例
import yaml |
