yaml是一种写配置文件的序列化语言,也可以看作一个标记语言,类似于json。yaml语法类似于其它高级语言,适合用来表达或编辑数据结构、各种配置文件、文件大纲等。yaml文件后缀名为.yaml。
一、基本语法
yaml对大小写敏感、使用缩进表示层级关系、缩进只能不能使用tab只允许空格、缩进空格数不重要只要相同层级元素左对齐即可、“#”注释
二、yaml数据类型
对象(键值对合集):
key:
child-key:value1
child-key:value2
数组:
以 - 开头的行表示构成一个数组:
- A
- B
- C
一个相对复杂的例子:
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
用流式表示为:
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
数组和对象的复合:例
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
纯量
包括字符串、布尔值、整数、浮点数、Null、时间、日期
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dddatetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
三、简要总结
yaml主要有三种类型的数据原语:Maps,Lists,Scales(按照官方法表达:“mappings (hashes/dictionaries), sequences (arrays/lists) and scalars (strings/numbers)”),基于这三种数据原语可以组合出任何数据结构。
破折号和空格( “-” ):Lists集合
冒号和空格( “:” ) :Maps键值对
井号( “#” ):注释
三个破折号( “---” ):文档内容分隔线(多用于文档开始的地方)
三个冒号( “...” ):表示文档的结束
锚点(“&”),重复项抛锚(“*”):两者成对表达,像定义变量a,再引用变量a的关系,是一种重复项的替换。
yaml基于缩进的作用域跟python语法格式比较相似,缩进块方便数据的结构化。
四、其它
1、Block Sequences 块序列是一个简单的一系列节点
blocksequence: -one -two:three
2、锚点符号的示例:
(官方表述:Repeated nodes (objects) are first identified by an anchor (marked with the ampersand - [“&”](https://yaml.org/spec/1.2/spec.html#& anchor//)), and are then aliased (referenced with an asterisk - [“*”](https://yaml.org/spec/1.2/spec.html#* alias//)) thereafter. )
---hr: -MarkMcGwire# Following node labeled SS -&SSSammySosarbi: -*SS# Subsequent occurrence -KenGriffey
五、python读取yaml
python中有相应的yaml模块可以处理yaml文件
例:
import yaml
yamlPath='XXX'
f=open(yamlPath,'r',encoding='utf-8')
cont=f.read()
yaml.load(cont)
网友评论