1-Python - pyyaml
about
引自pypi官网:
YAML([ˈjæməl] Yet Another Markup Language)是一种数据序列化格式,设计用于人类的可读性和与脚本语言的交互。PyYAML是Python的YAML解析器和生成器。
PyYAML提供了一个完整的YAML 1.1解析器、Unicode支持、pickle支持、支持扩展API和合理的错误消息。PyYAML支持标准的YAML标记,并提供了特定于Python的标记,允许表示任意的Python对象。
PyYAML适用于范围广泛的任务,从复杂的配置文件到对象序列化和持久性。
YAML是一种被认为可以超越XML、JSON的配置文件,最早接触是Spring Boot.........
yaml基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- #表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
yaml支持的数据结构有3种
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
安装
pip install pyyaml
pip install -i https://pypi.doubanio.com/simple pyyaml
或者从pypi官网下载包,然后使用setup.py安装:
python setup.py install
yaml文件长这样:
client:
default-character-set: utf8
custom:
user1:
pwd: 666
user: zhangkai
user2:
pwd: 999
user: zhangkai
mysql:
password: 123
user: new_root
usage
写文件
还是老套路,创建一个yaml文件:
import yaml
d = {
"client": {"default-character-set": "utf8"},
"mysql": {"user": 'root', "password": 123},
"custom": {
"user1": {"user": "zhangkai", "pwd": 666},
"user2": {"user": "zhangkai", "pwd": 999},
}
}
# 直接dump可以把对象转为YAML文档
print(yaml.dump(d))
with open('./my.yaml', 'w', encoding='utf-8') as fw:
yaml.dump(d, fw)
读文件
import yaml
file_path = './my.yaml'
with open(file_path, 'r', encoding='utf-8') as fr:
data = yaml.load(fr)
print(data)
这么着虽然能打印出结果,但是会有一个YAMLLoadWarning
提示:
YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
反正说这么用不安全......
解决办法是在load的时候加一个参数:
import yaml
file_path = './my.yaml'
with open(file_path, 'r', encoding='utf-8') as fr:
data = yaml.load(fr, yaml.FullLoader)
print(data)
更新操作
import yaml
file_path = './my.yaml'
with open(file_path, 'r', encoding='utf-8') as fr:
data = yaml.load(fr, yaml.FullLoader)
data['mysql']['user'] = 'new_root'
with open(file_path, 'w', encoding='utf-8') as fw:
yaml.dump(data, fw)
我觉得上述代码没啥好解释的,从yaml文件中读取出整个字典,然后一顿操作猛如虎后,还不是要乖乖的重新写入到文件......这当然达到了更新的操作。
至于其他的操作,由于读取的yaml文件是个字典类型的数据,我就不多说了。
欢迎斧正,that's all see also:
YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe | python操作YAML文件之pyyaml库 | Python的PyYAML模块详解