深南之星

导航

 

 

 

 


执行pip install pyyaml(而不是pip install yaml),后来才知道,python3.X只能使用
pip install pyyaml 来安装

 


yaml 语法:
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左对齐即可
# 表示注释,从它开始到行尾都被忽略


ymal:


首先YAML中允许表示三种格式,分别是常量值,对象和数组

对象
使用冒号代表,格式为key: value。冒号后面要加一个空格:
eg key: value


可以使用缩进表示层级关系;
key:

child-key: value

child-key2: value2

数组
使用一个短横线加一个空格代表一个数组项:
hobby:

- Java

- LOL

一个相对复杂的例子:
companies:

-

id: 1
name: company1

price: 200W

-

id: 2
name: company2

price: 500W

 


常量
YAML中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。

boolean:

- TRUE #true,True都可以
- FALSE #false,False都可以
f
float:

- 3.14
- 6.8523015e+5 #可以使用科学计数法
i
int:

- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:

nodeName: 'node'
parent: ~ #使用~表示null
s
string:

- 哈哈

- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline

newline2 #字符串可以拆成多行,每一行会被转化成一个空格
d
date:

- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
d
datetime:

- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区


一些特殊符号
1,--- YAML可以在同一个文件中,使用---表示一个文档的开始;比如Springboot中profile的定义:
2,... 和---配合使用,在一个配置文件中代表一个文件的结束:相当于在一个yaml文件中连续写了两个yaml配置项。
3,!! YAML中使用!!做类型强行转换:
eg string:

- !!str 54321
- !!str true
4,引用。重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点引用,例如:
hr:
-
- Mark McGwire
-
- &SS Sammy Sosa
r
rbi:
-
- *SS
-
- Ken Griffey

 

 

 

使用起来非常简单,就像json、pickle一样,load、dump就足够我们使用了。
import yaml

yaml_str = """
name: 灰蓝
age: 0
job: Tester
"""

y = yaml.load(yaml_str)
print y

结果:{'job': 'Tester', 'age': 0, 'name': u'\u7070\u84dd'}

 


import yaml

python_obj = {"name": u"灰蓝",
"age": 0,
"job": "Tester"
}

y = yaml.dump(python_obj, default_flow_style=False)
print y

结果:
age: 0
job: Tester
name: "\u7070\u84DD"

 


1. 基本规则:
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左对齐即可
# 表示注释,从它开始到行尾都被忽略

 

 


2. yaml 转字典(注意yaml格式后面有空格)
#test.yaml #下面格式读到Python里会是个dic
name: 灰蓝
age: 0
job: Tester


with open("test.yaml",'a',encoding='utf-8',) as fh:
fh.write('abc')
print(output)


3. yaml 转列表(注意yaml格式’-‘后面有空格)
yaml中支持列表或数组的表示,注意裂变中的每一个元素前面用符号 - 如下:
#test.yaml
#
#下面格式读到Python里会是个list

 

- 灰蓝
- 0
- Tester

 

4. 复合结构(整个读出来的应该全部是列表及列表的元素,不存在列表和字典混合存在)
字典和列表可以复合起来使用,注意这里使用 - 如下:
# test.yaml
#下面格式读到Python里是个list里包含dict
-
- name: 灰蓝

age: 0
job: Tester
-
- name: James

age: 30


5. 基本类型
yaml中有以下基本类型:
字符串
整型
浮点型
布尔型
null
时间
日期

如果字符串没有空格或特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加引号了

这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被Python转义,到最后是输出了特殊字符;

import yaml

y = yaml.load(file('test.yaml', 'r'))
print y['str1']
print y['str2']

结果:
Hello\nWorld
Hello
World


6. 引用
#test.yaml
name: &name 灰蓝
tester: *name

输出:{'name': u'\u7070\u84dd', 'tester': u'\u7070\u84dd'}


7. 强制转换


str: !!str 3.14
int: !!int "123"


输出:{'int': 123, 'str': '3.14'}


8. 分段

---
name: James
age: 20
---
name: Lily
age: 19

 

posted on 2020-02-03 23:39  深南之星  阅读(277)  评论(0编辑  收藏  举报