YAML 是一个可读性高,用来表达资料序列化的格式。
.yaml
, .yml
版本 | 发布日期 |
---|---|
YAML 1.0 | 29 January 2004 |
YAML 1.1 | 18 January 2005 |
YAML 1.2.0 | 21 July 2009 |
YAML 1.2.1 | 1 October 2009 |
YAML 1.2.2 | 1 October 2021 |
Python
的缩进要求很相似---
receipt: Oz-Ware Purchase Invoice
date: 2012-08-06
customer:
given: Dorothy
family: Gale
items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4
- part_no: E1628
descrip: High Heeled "Ruby" Slippers
size: 8
price: 133.7
quantity: 1
bill-to: &id001
street: |
123 Tornado Alley
Suite 16
city: East Centerville
state: KS
ship-to: *id001
specialDelivery: >
Follow the Yellow Brick
Road to the Emerald City.
Pay no attention to the
man behind the curtain.
...
Space
缩进表示分层,不同层次之间的缩进可以使用不同的空格数目,但是同层元素一定左对齐,即前面空格数目相同(不能使用 Tab,各个系统 Tab对应的 Space 数目可能不同,导致层次混乱)#
表示注释,只能单行注释,从 #
开始处到行尾key: value
server:
port: 8081
path: /hello
属性和值大小写敏感。
如果字符串没有空格或特殊字符,不用加引号包裹
加了双引号表示引号内的字符串不会被转义 (\n
为换行符)
name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
加了单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据
1
name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
key: value
, 在下一行来写对象的属性和值的关系;注意缩进m, 对象还是k: v
的方式
friends:
lastName: zhangsan
age: 20
-
(这里有个空格)值表示数组中的一个元素pets:
- cat
- dog
- pig
数组也可以有行内写法:
pets: [cat,dog,pig]
按照这个规则,数组是可以嵌套的
age: 23
items:
- age: 15
name: AA
sub_items:
- link: baidu
name: test
- link: google
name: foo
- age: 66
name: BB
sub_items:
- link: opencv
name: bar
- link: halcon
name: tt
yaml 中有以下基本类型:
示例:
str: "Hello World!"
int: 110
float: 3.141
boolean: true # or false
None: null # 也可以用 ~ 号来表示 null
time: 2016-09-22t11:43:30.20+08:00 # ISO8601,写法百度
date: 2016-09-22 # 同样ISO8601
& 和 * 用于引用
name: &name 灰蓝
tester: *name
这个相当于以下脚本:
name: 灰蓝
tester: 灰蓝
!!
实现,如下:str: !!str 3.14
int: !!int "123"
输出:
{'int': 123, 'str': '3.14'}
明显能够看出123被强转成了int类型,而float型的3.14则被强转成了str型。
在同一个yaml文件中,可以用 — 来分段,这样可以将多个文档写在一个文件中
---
name: James
age: 20
---
name: Lily
age: 19
import yaml
yaml.load(f)
yaml.dump(new_date, f)
import yaml
new_date = {
"name": "Tom",
"age": 23,
"sex": "man",
'items':[
{
'name': 'AA',
'age': 15,
'sub_items': [
{
'name': 'test',
'link': 'baidu'
},
{
'name': 'foo',
'link': 'google'
}
]
},
{
'name': 'BB',
'age': 66,
'sub_items': [
{
'name': 'bar',
'link': 'opencv'
},
{
'name': 'tt',
'link': 'halcon'
}
]
}
]
}
f = open("test.yaml", "w")
yaml.dump(new_date, f)
f.close()
f = open("test.yaml", "r")
loaded_yml_obj = yaml.load(f)
f.close()
print(loaded_yml_obj)
age: 23
items:
- age: 15
name: AA
sub_items:
- link: baidu
name: test
- link: google
name: foo
- age: 66
name: BB
sub_items:
- link: opencv
name: bar
- link: halcon
name: tt
name: Tom
sex: man
{'age': 23, 'items': [{'age': 15, 'name': 'AA', 'sub_items': [{'link': 'baidu', 'name': 'test'}, {'link': 'google', 'name': 'foo'}]}, {'age': 66, 'name': 'BB', 'sub_items': [{'link': 'opencv', 'name': 'bar'}, {'link': 'halcon', 'name': 'tt'}]}], 'name': 'Tom', 'sex': 'man'}