📅  最后修改于: 2023-12-03 15:34:13.799000             🧑  作者: Mango
YAML(YAML Ain't Markup Language)是一种轻量级的数据序列化格式,它使用可读性强的文本格式来表示数据,方便人类阅读和编写。在 Python 中,我们可以使用 PyYAML 库来读取和解析 YAML 数据。
使用 PyYAML 前,需要先安装它。可以使用 pip 命令来进行安装:
pip install pyyaml
假设有一个名为 data.yaml
的 YAML 文件,内容如下:
- name: Alice
age: 25
hobbies:
- reading
- hiking
- name: Bob
age: 30
hobbies:
- fishing
- gardening
我们可以使用 PyYAML 这个库来读取这份数据:
import yaml
with open('data.yaml') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
输出结果:
[{'name': 'Alice', 'age': 25, 'hobbies': ['reading', 'hiking']}, {'name': 'Bob', 'age': 30, 'hobbies': ['fishing', 'gardening']}]
在 Python 中,将 YAML 转换成的数据类型是字典、列表和基本类型组成的嵌套结构。例如,上面的 YAML 文件被转换成如下的 Python 对象:
[
{
'name': 'Alice',
'age': 25,
'hobbies': ['reading', 'hiking'],
},
{
'name': 'Bob',
'age': 30,
'hobbies': ['fishing', 'gardening'],
}
]
其中每个 YAML 文档对应一个字典,其中每个键对应一个值。每个值可以是一个字典、列表,或者是字符串、数字等基本类型。
有时候一个 YAML 文件中包含了多个文档,我们可以使用 yaml.load_all()
方法来一次性读取全部文档:
# file.yaml
---
name: John
age: 28
---
name: Jane
age: 32
读取文件:
with open('file.yaml') as f:
documents = yaml.load_all(f, Loader=yaml.FullLoader)
for doc in documents:
print(doc)
输出:
{'name': 'John', 'age': 28}
{'name': 'Jane', 'age': 32}
除了基本的键值对、列表数据结构,YAML 还支持一些高级特性:
#
开头的行表示注释。<<
关键字来继承数据。&
与*
来引用已经定义好的节点。在处理 YAML 的时候,还需要注意以下几点:
yaml.load()
方法时,需要设置 Loader 参数为 yaml.FullLoader
,否则会有安全问题。以上便是 Python 中使用 PyYAML 库来读取和解析 YAML 数据的基本方法和一些注意事项。