1、语法大小写敏感
缩进表示层级,缩进的长度没有限制,不允许使用Tab键,只能使用空格
#可用来表示注释
支持字典, 列表, 纯量
2、字典表示
python中写法:
"key": {
"child_key1":"value1",
"child_key2":"value2"
}
YAML中写法:key:value
# 常规写法
key:
child_key1: value1
child-key2: value2
# 流失(flow)写法
key: {child_key1: value1, child_key2: value2}
# 复杂的价值对,一个问号 加一个空格代表一个复杂的key,配合一个冒号加一个空格 代表一个value
?
- complex_key1
- complex_key2
:
- complex_value1
- complex_value2
3、列表
python中写法:
{'hobby': ['a1', 'a2']}
[['a1', 'a2']]
YAML中写法:短线+一个空格
hobby:
- python
- test
-
- python
- test
# 行内写法:
hobby:[python, test]
4、纯量
支持常量:整数、浮点数、字符串、NULL、日期、布尔值、时间
YAML中写法样例:
int:
- 123
- 0b1010_0111_0100_1010_1110 # 二进制表示
float:
- 3.14159
- 6.6e+5 # 可使用科学计数法
string:
- 'Hello world!' # 可使用双引号或单引号包裹特殊字符,双引号不会对特殊字符转义。
- newline
newline2 # 字符串可拆成多行,每一行会被转化成一个空格
null:
nodeName: 'node'
parent: ~ # 使用 ~ 表示null
boolean:
- TRUE # true 或True都可以
- FALSE # false 或False都可以
date:
- 2018-12-29 # 日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-12-29T18:43:21+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
5、特殊符号:
分块:
表示一个分块的开始和结束,等价于在一个文件中写了两个配置项
# ---表示开始 ...表示结束
---
time: 19:13:09
player: Tim
action: strike
...
---
time: 20:14:45
player: Lily
action: grand
...
类型转换:
string:
- !!str 123456
- !!str true
引用:
重复的东西,用&来表示锚点定义, *来表示锚点引用
YAML中写法:
hr:
- Mark McGwire
- &SS Sammy Sosa
rbi:
- *SS
- Ken Griffey
# 引用数组
default: &default
- Mark McGwire
- Sammy Sosa
hr: *default
合并引用:
merge:
- &CENTER { x: 1, y: 2 }
- &LEFT { x: 0, y: 2 }
- &BIG { r: 10 }
- &SMALL { r: 1 }
sample1:
<<:>
r: 10
# 等价于 sample1={r=10, y=2, x=1}
sample2:
<< : [ *CENTER, *BIG ]
other: haha
# 等价于 sample2={other=haha, x=1, y=2, r=10}
sample3:
<< : [ *CENTER, *BIG ]
r: 100
# 等价于 sample3={r=100, y=2, x=1} r值被覆盖
延续换行:
python中写法:
{'accomplistment': 'Mark set a major league home run record in 1998.'}
YAML中写法:
acomplistment: >
Mark set a major league
home run record in 1998.
保留换行:
YAML中写法
status: |
65 Home Runs
0.278 Batting Average
6、文件读写load(),解析yaml文档,返回一个Python对象;
load_all(),如果是string或文件包含几块yaml文档,可用该方法来解析全部的文档,生成一个迭代器;
dump(),将一个Python对象生成为一个yaml文档;
dump_all(),将多个段输出到一个yaml文档中。
# 读
# 用open方法打开直接读取
f = open(ymlPath, 'r')
cfg = f.read()
print(type(cfg)) # 读取的结果是 字符串
print(cfg)
d = yaml.load(cfg) # 用load方法转字典 d = yaml.load_all(cfg)
print(d)
print(type(d))
# 写
py_object = {'school': 'zhang',
'students': ['a', 'b']}
file = open(yaml_file, 'w', encoding='utf-8')
yaml.dump(py_object, file)
file.close()