在yaml文件中我们通常使用“&”(锚点)和“*”(别名),来做引用操作。
&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。
username: abidal
password: 123456
hobby: ['music', 'reading', 'speak']
userInfo: &userInfo
uid: 1001
tel: 13549367372
loginUser:
<<: *userInfo
token: 1q1desfgr2344refdt54tfd00n8n7==
转为Python字典:
{'username': 'abidal', 'password': 123456, 'hobby': ['music', 'reading', 'speak'], 'userInfo': {'uid': 1001, 'tel': 13549367372}, 'loginUser': {'uid': 1001, 'tel': 13549367372, 'token': '1q1desfgr2344refdt54tfd00n8n7=='}}
nation:
- &china Chinese
- Japan
- America
- *china
转为Python字典:
{ 'nation': ['Chinese', 'Japan', 'America', 'Chinese']}
1)使用中划线"-" + 空格 + 取值
- Tom
- Jacky
- Dandy
转为python列表: ['Tom', 'Jacky', 'Dandy']
2)嵌套数组的表示方法
- Tom
- Jacky
- Dandy
转为python列表: [['Tom', 'Jacky', 'Dandy']]
3) 数组也可以采用行内表示法。
nation: [Chinese, Japan, America]
转为python字典: {'nation': ['Tom', 'Jacky', 'Dandy']}
1)使用key + ":" + 取值
示例: name: zhangsan
转为python字典:{'name': 'zhangsan'}
2) 字典嵌套字典的表示方法
data:
user1:
username: test01
password: 123456
user2:
username: test02
password: 123456
转为python字典:
{'data': {'user1': {'username': 'test01', 'password': 123456}, 'user2': {'username': 'test02', 'password': 123456}}}
3) 字典嵌套数组的表示方法
data:
username: test01
password: 123456
username: test02
password: 123456
转为python字典:
{'data': [{'username': 'test01', 'password': 123456}, {'username': 'test02', 'password': 123456}]}
4) 将所有键值对写成一个行内对象
data: {user01:{username: test01, password: 123456}, user02:{username: test02, password: 123456}}
转为python字典:
{'data': {'user01': {'username': 'test01', 'password': 123456}, 'user02': {'username': 'test02', 'password': 123456}}}
说白了就是将对象和数组结合起来进行使用
data:
username: test01
password: 123456
username: test02
password: 123456
testdata: {user01:{username: test01, password: 123456}, user02:{username: test02, password: 123456}}
转为python字典:
{'data': [{'username': 'test01', 'password': 123456}, {'username': 'test02', 'password': 123456}], 'testdata': {'user01': {'username': 'test01', 'password': 123456}, 'user02': {'username': 'test02', 'password': 123456}}}
使用pip包管理工具命令进行安装:pip install PyYAML
命令行执行:pip freeze 或者 pip list 都可以
如下图则说明安装成功。

这个和其他的python第三方库的使用方法大同小异, 都是需要先导包,导包成功后就可以在模块中使用该第三方模块的函数和方法。
这里我们先在命令行下看看这个库都有哪些方法:
第一步: 导入模块import yaml
第二步: 查看模块的所有属性和方法dir(yaml)

一般我们都是将yaml文件当成配置文件来进行使用,这里我们只着重文件的读写操作相关的方法说明,其实说白了yaml这和json以及pickle模块都非常相似, 操作无非就是读、写,将python类型的数据序列化之后写入到.yaml格式的文件中进行存储, 或者就是从.yaml文件读取数据反序列化成Python能识别的数据类型进行处理。文件操作的过程大多数基本都是这样。
这里我们着重说明
yaml.safe_load()、yaml.safe_load_all()、yaml.load()、yaml.load_all()、
yaml.safe_dump()、yaml.safe_dump_all()、yaml.dump()、yaml.dump_all()
方法名称 | 传参 | 返回值 | 解释说明 | 是否官方推荐使用 |
---|
yaml.load() | 文件句柄(文件资源对象) | python字典 | 返回值的类型取决于yaml文件的数据类型,如果是数组,返回列表对象;如果是纯量、字符串、复合类型、对象、哈希。则返回python字典对象 | 不推荐 |
yaml.load_all() | 文件句柄(文件资源对象) | python生成器对象 | 可以使用内置方法next()或者将生成器对象转成列表对象进行处理 | 不推荐 |
yaml.safe_load() | 文件句柄(文件资源对象) | python字典 | 返回值的类型取决于yaml文件的数据类型,如果是数组,返回列表对象;如果是纯量、字符串、复合类型、对象、哈希。则返回python字典对象 | 推荐 |
yaml.safe_load_all() | 文件句柄(文件资源对象) | python生成器对象 | 可以使用内置方法next()或者将生成器对象转成列表对象进行处理 | 推荐 |
方法使用示例:
- yaml.load()

- yaml.load_all()
- yaml.safe_load()

- yaml.safe_load_all()

方法名称 | 传参 | 返回值 | 解释说明 | 是否官方推荐使用 |
---|
yaml.dump() | python数据对象,文件资源对象 | yaml可识别的字符串 | 需要传递两个参数, 第一个是python数据类型的数据对象[列表或字典];第二个是数据要写入的文件资源对象,如果不带第二个参数,则默认会返回一个类似yaml格式的字符串 | 不推荐 |
yaml.dump_all() | python数据对象,文件资源对象 | yaml可识别的字符串 | 需要传递两个参数, 第一个是python数据类型的数据对象[列表或字典];第二个是数据要写入的文件资源对象,如果不带第二个参数,则默认会返回一个类似yaml格式的字符串 | 不推荐 |
yaml.safe_dump() | python数据对象,文件资源对象 | yaml可识别的字符串 | 需要传递两个参数, 第一个是python数据类型的数据对象[列表或字典];第二个是数据要写入的文件资源对象,如果不带第二个参数,则默认会返回一个类似yaml格式的字符串 | 推荐 |
yaml.safe_dump_all() | python数据对象,文件资源对象 | yaml可识别的字符串 | 需要传递两个参数, 第一个是python数据类型的数据对象[列表或字典];第二个是数据要写入的文件资源对象,如果不带第二个参数,则默认会返回一个类似yaml格式的字符串 | 推荐 |
方法使用示例:
-
yaml.dump([data], stream)

-
yaml.dump_all([data], stream)

-
yaml.safe_dump([data], stream)

-
yaml.safe_dump_all([data], stream)

1.yaml主要用途YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。2.yaml支持的数据结构数据结构名称包含的数据类型描述说明纯量字符串、布尔值、整数、浮点数、Null、时间、日期不可变数据类型,单个的、不可再分的值数组序列(sequence) / 列表(list)一组按次序排列的值对象映射(mapping)/ 哈希(hashes) / 字典(dictionary)键值对的集合3.yaml语言的语法规则大小写敏感
http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/
下载PyYAML:
http://www.yaml.org/
解压安装:
python setup.py install
1.新建test.yaml文件,内容如下:
name: Tom Smith
age: 37
spouse:
name: Jane Smith
age: 25
children:
- name: Jimmy Smith
age: 15
- name1: Jenny Smith
age1: 12
2.创建python文件t
yaml格式的基础介绍在网上很多,可以参考下面这篇博客
https://www.jianshu.com/p/97222440cd08
总结一下yaml格式主要由3种格式组成 常量 对象 数组,用法见下面的例子
#即表示url属性值;
url: http://www.wolfcode.cn
#即表示server.host属性的值;
server:
host: http:/...
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写,是一种人类易读的数据序列化语言。它通常运用在一些数据代码分离场合:用于配置文件,但也用于数据存储(例如调试输出)或传输(例如文档标题)。YAML 的配置文件后缀为 .yml,如:runoob.yml 。
YAML支持的类型
键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
一组按次序排列的值,又称为序列(sequence) /