Yaml提供了多种方法,常用的为yaml.load()和yaml.dump()。
它的基本语法规则如下:
1. 大小写敏感
2. 使用缩进表示层级关系
3. 缩进时不允许使用Tab键,只允许使用空格。
4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
# 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
PyYaml文件编写格式
yaml文档除了可以通过dump进行转化之外,也可以根据yaml文档的格式进行编写。
- 对象的一组键值对,使用冒号结构表示。
- 一组减号开头的行,构成一个list。
- 对象和数组可以结合使用,形成复合结构。
- ~ 代表None
- 布尔类型 直接写bool: True False
YAML 支持的数据结构有三种:
1、对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
2、数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
3、纯量(scalars):单个的、不可再分的值。字符串、布尔值、整数、浮点数、Null、时间、日期
使用yaml.load()会有警告信息
yaml升级到5.3版本之后,使用yaml.load()会有警告信息。
在官网第一句就说了,这个页面解释了PyYAML 5.1 yaml.load(input)方法为什么不被推荐使用。yaml.load()方法如果不指定Loader=...参数,是不被推荐的,如果直接使用yaml.load(input),虽然也可以用,但是会收到警告信息。在PyYAML 5.1以前的版本中,yaml.load是非常易于使用的,还举了个例子。
如何解决这个问题呢?有几种方式:
方式一:指定yaml.load(input, Loader=SafeLoader)
Loader有几种
①BaseLoader:仅加载最基本的YAML
②SafeLoader:安全地加载YAML语言的子集。建议加载不可信的输入。
③FullLoader:加载完整的YAML语言。避免执行任意代码。当前(PyYAML 5.1)是yaml.load(input)(在发出警告之后)调用的默认加载程序。
④UnsafeLoader:不受信任的数据输入很容易利用的原始Loader代码。
方式二:直接使用yaml.safe_load(input)
方式三:全局禁用警告
数据写入yaml文件dump()
data数据中有汉字时,加上:encoding='utf-8', allow_unicode=True