目录
PyYAML库,import yaml
1、什么是yaml数据
2、YAML应用场景
3、PyYAML库-三方库
PyYAML库,import yaml
1、什么是yaml数据
YAML,全称是"YAML Ain't a Markup Language"(YAML 不是一种标记语言),是一种人类可读的数据序列化标准格式。它通常用于配置文件、数据交换等需求中。
YAML的设计目标是,数据结构易于理解,对人类友好,容易配对语言之间流通使用,且支持一次性dump(转储),然后又能一次性导入到程序里。
YAML数据通常使用.yml或.yaml为文件扩展名。一份YAML文件可能包含基本类型(数字,字符串,布尔型),数据集合(数组,列表),以及关联数组(哈希表,字典)
一个YAML数据的简单示例:
name: John Smith
age: 30
married: true
children:
- name: Alice Smith
age: 5
- name: Bob Smith
age: 7
在这段YAML数据中,我们定义了一个名为"John Smith"的人,他30岁,已婚,并且有两个孩子。
YAML的特点在于其良好的可读性和兼容性。你会发现YAML比XML或JSON更容易阅读和编辑,还能更好地和各种语言兼容。
2、YAML应用场景
Python中的YAML主要用于以下几种场景:
- 配置文件: YAML格式易读易写,人类友好,因此经常作为各种应用和工具的配置文件。例如,很多Python web框架(如Flask,Django)的配置文件就可以使用YAML编写。
- 数据序列化: YAML可以表示除基础的数字/字符串/布尔值等类型外,还可以表示列表、字典等复杂结构,因此适合作为数据序列化的格式。一些Python项目中,可能会将内存中的数据序列化成YAML格式,保存到文件或者数据库中,以便于后续恢复使用。
- 数据交换: YAML是一种通用的数据格式,可以跨语言使用,Python有成熟的YAML库支持,因此在进行跨语言的数据交换时,也会使用YAML这种格式。例如,一个Python程序和一个Ruby程序之间的数据交换,就可以使用YAML格式。
- 测试: 在一些测试场景中,测试用例数据利用YAML格式进行管理。因为YAML格式方便编写和阅读,有助于提高测试数据的维护效率。
- CI/CD脚本: 许多CI/CD(持续集成和持续部署)工具(如Travis CI,GitLab CI,Jenkins等)的脚本就是用YAML格式编写的。
- 容器编排: 例如 Kubernetes(K8s)官方推荐的编排文件就是使用YAML编写的。
以上就是在Python中使用YAML的一些常见场景。
3、PyYAML库-三方库
Python中的PyYAML库是一个用于解析和生成YAML数据的库。
YAML,即“YAML Ain't a Markup Language”(YAML不是一种标记语言),是一种易于阅读、适合表示层次和关联数据的可读数据序列化标准格式。
下面是如何安装和使用PyYAML的一些基本示例:
安装PyYAML库
可以使用pip在Python环境中安装PyYAML:
使用PyYAML库
PyYAML的主要功能函数是yaml.load(解析YAML数据)和yaml.dump(生成YAML数据)
pip install pyyaml
import yaml
# 解析YAML数据
data = yaml.load("""
- foo
- bar
- baz
""", Loader=yaml.FullLoader)
print(data) # 输出:['foo', 'bar', 'baz']
# 生成YAML数据
data = {"foo": "bar", "baz": "qux"}
print(yaml.dump(data))
# 输出:
# foo: bar
# baz: qux
注意:从PyYAML 5.1开始,默认的加载函数yaml.load(input)已经被废弃,为了安全解析YAML文件,推荐使用yaml.safe_load(input)或yaml.load(input, Loader=yaml.FullLoader)。
在处理YAML数据时,还需要注意YAML是区分大小写和缩进的,同样的,在PyYAML中也遵循这些规则。
以下是一些主要的方法:
- yaml.load(stream, Loader=None): 将一个YAML文档从流中加载并产生一个Python对象。stream可以是一个字符串、一个文件对象或者一个字节流。
- yaml.safe_load(stream): 这个函数和yaml.load()函数类似,但只能加载"安全的"YAML。这可以防止执行任何不安全的构造函数。推荐在处理不受信任的输入时使用此函数。
- yaml.full_load(stream): 如果你不需要任何安全性, 但需要加载所有YAML 1.1的构造函数(日期、复数、任意精度等类型),可以使用此函数。
- yaml.dump(data, stream=None, **kwds): 将一个Python对象序列化为一个YAML文档并写入一个流。如果stream为None,则把生成的YAML文档作为字符串返回。
- yaml.safe_dump(data, stream=None, **kwds): 与dump()函数类似,但只能处理安全的Python对象,例如不能序列化Python的函数和类。
- yaml.load_all(stream, Loader=None): 从一个流中加载所有的YAML文档并为每个文档生成一个Python对象。返回一个生成器,可以遍历产生的对象。
- yaml.dump_all(documents, stream=None, **kwds): 将一系列Python对象序列化为YAML文档并写入一个流。如果stream为None,则把生成的YAML文档作为字符串返回。
此外,PyYAML还提供了一些方法方便自定义和扩展,例如定义自己的构造函数和表示函数,设置输出样式等。
以下是一些在Python中使用PyYAML库的示例:
加载YAML
你可以使用yaml.load函数(或者安全的yaml.safe_load函数)从字符串或者文件中读取YAML数据:
import yaml
# YAML字符串
yaml_string = """
name: John Smith
age: 30
married: true
children:
- name: Alice Smith
age: 5
- name: Bob Smith
age: 7
"""
data = yaml.safe_load(yaml_string)
print(data["name"]) # 输出:John Smith
print(data["children"][0]["name"]) # 输出:Alice Smith
写入YAML
你可以使用yaml.dump函数(或者安全的yaml.safe_dump函数)将Python对象转储为YAML格式的字符串,或者写入文件:
import yaml
data = {
"name": "John Smith",
"age": 30,
"married": True,
"children": [
{"name": "Alice Smith", "age": 5},
{"name": "Bob Smith", "age": 7},
]
}
yaml_data = yaml.dump(data)
print(yaml_data)
# 输出:
# name: John Smith
# age: 30
# married: true
# children:
# - name: Alice Smith
# age: 5
# - name: Bob Smith
# age: 7
加载多个YAML文档
有时候一个YAML文件中可能包含多个YAML文档,你可以使用yaml.safe_load_all函数一次性加载所有的文档:文章来源:https://www.toymoban.com/news/detail-835025.html
import yaml
yaml_string = """
---
name: John
age: 30
---
name: Alice
age: 20
"""
documents = yaml.safe_load_all(yaml_string)
for doc in documents:
print("---")
print(doc)
在这个例子中,---是用来分隔多个YAML文档的标记。文章来源地址https://www.toymoban.com/news/detail-835025.html
到了这里,关于【Python】PyYAML库介绍及用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!