Python|Python YAML文件的读写操作详解
目录
- YAML格式
- YAML文件
- YAML操作
- 读取
- 存储
- 示例
- 转字典
- 转列表
YAML格式 YAML三种基本数据类型:
1.标量:如字符串、整数和浮点数、日期
- 布尔值:“true”、“True”、“TRUE”、“yes”、“Yes"和"YES”,“false”、“False”、“FALSE”、“no”、“No"和"NO”
- 空:null、Null、
~
或不指定值;
-
表示,且符号与值间要有空格;3.对象:键值对集合;用冒号+空格
:
分割;YAML文件
文件基本规则:
区分大小写;
使用缩进表示层级关系:
- 缩进要用空格(非Tab);
- 相同层级元素要左对齐;
使用
#
注释;一个文件中可包含多份YAML文档:
用
---
(即三个中划线)表示一份文档的开始;[可选]用
...
(即三个小数点)表示一份文档的结束;---
# 这是第一份文档
one: 1
# 其他内容...
...
---
# 这是第二份文档
two: 2
# 其他内容...
YAML操作 Python中有两个YAML模块:PyYAML和ruamel.yaml(
pip3 install pyyaml
,pip3 install ruamel.yaml
)。读取
通过load函数可方便加载文档内容,返回的内容可能是字典、列表或空:
import yamldef readYaml(file):# -> Union[dict, list, None]:with open(file, 'r', encoding='utf-8') as f:return yaml.load(f, yaml.Loader)
若文件中有多个文档,需要使用load_all来加载;此时返回的是一个生成器,需要一次获取每个文档:
def readAllDoc(file) -> list:with open(file, 'r', encoding='utf-8') as f:docs = yaml.load_all(f, yaml.Loader)# return [d for d in docs]return list(docs)
存储
yaml.dump()方法不会将列表或字典数据进行转化yaml标准模式。需要通过ruamel.yaml来生成标准的yaml文档。
import ruamel.yamldef createYaml(file, data: dict):with open(file, 'w', encoding='utf-8') as f:writer = ruamel.yaml.YAML()writer.indent(mapping=2, sequence=4, offset=2)writer.dump(data, f)
通过dump_all可把数组中的每个元素序列化为一个文档:
def createAllDoc(file, data: list):with open(file, 'w', encoding='utf-8') as f:writer = ruamel.yaml.YAML()writer.indent(mapping=2, sequence=4, offset=2)writer.dump_all(data, f)
把
[{'name': 'Mike', 'age': 12}, {'name': 'luce', 'age': 15}]
序列化。dump会生成如下包含数组元素的yaml文件:
- name: Mikeage: 12- name: luceage: 15
dump_all会生成如下yaml文件(包含两个文档):
name: Mikeage: 12---name: luceage: 15
示例
yaml读取后为列表或字典。
转字典 读取的内容为一个字典:
name: mikeage: 25score: 80.5
返回的值为:
{获取里面值,先判断是否存在,再读取:
"name": "mike",
"age": 25,
"score": 80.5
}
if 'name' in data:print(data['name'])
转列表 读取内容为一个列表:
- name: mikeage: 24- name: tomage: 30
返回的值为:
[【Python|Python YAML文件的读写操作详解】到此这篇关于Python YAML文件的读写操作详解的文章就介绍到这了,更多相关Python YAML文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
{
"name": "mike",
"age": 24
},
{
"name": "tom",
"age": 30
}
]
推荐阅读
- Python详细介绍模型封装部署流程
- 非常全的一份Python爬虫的Xpath博文
- Github每日精选|Github每日精选(第21期)(开源文件同步syncthing)
- 随遇随记|git 不能识别文件名称大小写问题解决办法
- 自组织映射网络(SOM)介绍与Python实现
- ZIP文件操作(Linux)——CentOS7常用软件
- C++文件操作相关
- Python中%r和%s的区别
- Spark|Spark Python API Docs(part four)
- Python|Python Pandas的concat合并