目录
1. yaml基本示例
2. yaml组织结构
3. pyyaml的安装
4. 读取 / 写入单个yaml文件
5. 读取 / 写入多yaml文件
yaml官方文档:YAML Ain’t Markup Language (YAML™) revision 1.2.2
pyyaml官方文档:https://pyyaml.org/wiki/PyYAMLDocumentation
- Apple
- Banana
- orange
hr: 65
avg: 0.278
rbi: 147
american:
- Boston Red Sox # 键值对中的值是列表
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
-
name: Mark
hr: 65
avg: 0.278
-
name: Sammy
hr: 63
avg: 0.288
- [name , hr, avg ]
- [Mark , 65, 0.278]
- [Sammy, 63, 0.288]
Mark: {hr: 65, avg: 0.278}
Sammy: {
hr: 63,
avg: 0.288,
}
其余很多我就不赘述了,包括与python不同的是对于mapping的key值有列表等形式,还是比较推荐大家去官方文档查看里面示例非常清楚了
一个yaml文件可以由一个或多个文档组成,文档之间使用“---”作为分隔符。如果 yaml文件只包含一个文档,则"---"分隔符可以省略。"..."是一个文档的结束(非必须)。
# 结束符的三个点可以省略
---
age: 20
player: Sammy
...
---
age: 21
player: Sammy
...
1. 因为pyyaml是第三方模块,所以推荐直接使用pip安装即可
pip install pyyaml
2. 如果pip没有安装成功,还可以通过源码安装
下载源包PyYAML-5.1.tar.gz并解压缩,进入PyYAML-5.1目录,运行如下命令:
python setup.py install
yaml.load(stream, Loader=None) 函数用于将一个yaml文档转换为一个python对象。yaml.load接受一个字符串、二进制文件或文本文件对象等。
如下为test.yaml文件内容
name:
- wmq
- hello
- world
使用yaml.load(stream, Loader=None) 读取文件内容。yaml 5.1版本后弃用了yaml.load(file)这个用法,因为该用法不安全,5.1版本之后通过FullLoader,使该load函数也变得更加安全
import yaml
if __name__ == "__main__":
with open('./test.yaml', 'r', encoding='utf-8') as f:
data = yaml.load(stream=f, Loader=yaml.FullLoader)
print(data) # {'name': ['wmq', 'hello', 'world']}
写入文件内容使用yaml.dump(data, f),与python的json模块相似:
import yaml
if __name__ == "__main__":
data = {'name': 'wmq','scores': [100, 90]}
with open('./test.yaml', 'w', encoding='utf-8') as f:
yaml.dump(data, f)
读文件使用yaml.load_all(),其中返回的是generator,可勇for循环或者next取值
import yaml
if __name__ == "__main__":
with open('./test.yaml', 'r', encoding='utf-8') as f:
all_data = yaml.load_all(stream=f, Loader=yaml.FullLoader)
for data in all_data:
print(data)
同理,将多个文件内容写入yaml文件使用 yaml.dump_all()
import yaml
if __name__ == "__main__":
obj1 = {"name": "wmq", "age": 10}
obj2 = {"name": "pkq", "age": 11}
with open('./test.yaml', 'w', encoding='utf-8') as f:
yaml.dump_all([obj1, obj2], f)
test.yaml文件结果如下:
#------------------test.yaml-------------
age: 10
name: wmq
---
age: 11
name: pkq