目录
Python读写yml文件
json格式是一种数据格式约定,来自于JavaScript语言。因为使用方便,所以Python也实现了json格式的读写。
yml是另一种数据格式约定,很多语言都支持,Python当然也支持(第三方库)。
yml是什么格式
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。
YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
Python第三方库提供了yml格式的操作支持(https://github.com/yaml/pyyaml)。
来看一个yml格式例子
addr: beijing
age: 18
comp:
- comp1
- comp2
- comp3
love:
age: 16
name: xiaofang
name: zhangsan
这是什么呀?
确实,yml格式太难读懂了。它比json格式还简单,但比json更难读懂。
基本语法:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
总之,有以下几点需要掌握。
- yml主要表示键值对信息
- 嵌套信息只用空格缩进,不用tab,也不需要大括号
- 数组元素前面用横杠“-”表示
第三方库的安装(Python3)
pip install pyyaml
Python读写yml主要方法
Python读写yml格式主要有两个函数。
- 生成yml文本:yaml.dump()
- 读取yml文本:yaml.load()
此操作函数针对数据流,包括内存中的数据,也包括文件数据。
Python写入yml
将Python字典对象转换成yml字符串,示例如下。
import yaml
# 定义字典对象
adict={
"name": "zhangsan",
"addr": "beijing",
"comp": ["comp1","comp2","comp3"],
"age": 18,
"love": {
"name": "xiaofang",
"age": 16
}
}
# 转换成yml字符串
ayml=yaml.dump(adict)
print(ayml)
# 转换成yml字符串并写入文件
with open("mydata.yml","w") as f:
yaml.dump(adict,f)
程序运行结果
C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/atestpkg/t14.py
addr: beijing
age: 18
comp:
- comp1
- comp2
- comp3
love:
age: 16
name: xiaofang
name: zhangsan
Process finished with exit code 0
生成的文件为文本文件mydata.yml。
Python读取yml
下面来看读取yml文件的例子,读取Python中转为字典对象。
import yaml
# 打开yml文件,读取文件数据流
with open("mydata.yml","r") as f:
ayml=yaml.load(f.read(),Loader=yaml.Loader)
print(type(ayml))
print(ayml)
print(ayml["love"])
运行结果
C:UsershccmaAnaconda3python.exe E:/wkp01/p00/test01/atestpkg/t15.py
<class 'dict'>
{'addr': 'beijing', 'age': 18, 'comp': ['comp1', 'comp2', 'comp3'], 'love': {'age': 16, 'name': 'xiaofang'}, 'name': 'zhangsan'}
{'age': 16, 'name': 'xiaofang'}
Process finished with exit code 0