📜  python 读取 yaml - Python (1)

📅  最后修改于: 2023-12-03 15:34:13.799000             🧑  作者: Mango

Python 读取 YAML

YAML(YAML Ain't Markup Language)是一种轻量级的数据序列化格式,它使用可读性强的文本格式来表示数据,方便人类阅读和编写。在 Python 中,我们可以使用 PyYAML 库来读取和解析 YAML 数据。

安装 PyYAML

使用 PyYAML 前,需要先安装它。可以使用 pip 命令来进行安装:

pip install pyyaml
读取 YAML 数据

假设有一个名为 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']}]
YAML 的数据结构

在 Python 中,将 YAML 转换成的数据类型是字典、列表和基本类型组成的嵌套结构。例如,上面的 YAML 文件被转换成如下的 Python 对象:

[
    {
        'name': 'Alice',
        'age': 25,
        'hobbies': ['reading', 'hiking'],
    },
    {
        'name': 'Bob',
        'age': 30,
        'hobbies': ['fishing', 'gardening'],
    }
]

其中每个 YAML 文档对应一个字典,其中每个键对应一个值。每个值可以是一个字典、列表,或者是字符串、数字等基本类型。

读取多个 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 的时候,还需要注意以下几点:

  • 使用 yaml.load() 方法时,需要设置 Loader 参数为 yaml.FullLoader,否则会有安全问题。
  • 在处理包含 Unicode 字符和非 ASCII 字符的 YAML 数据时,需要设置 encoding 参数为 utf-8,否则可能会出现解码错误。

以上便是 Python 中使用 PyYAML 库来读取和解析 YAML 数据的基本方法和一些注意事项。