Python YAML 教程
Python YAML 教程 展示了如何在 Python 中使用 YAML 格式,我们使用 pyyaml 模块。
YAML 格式
YAML(不是 YAML 标记语言)是一种人类可读的数据序列化语言。 它通常用于配置文件,但也用于数据存储(例如调试输出)或传输(例如文档标题)。
YAML 本机支持三种基本数据类型:标量(例如字符串,整数和浮点数),列表和关联数组。
官方推荐的 YAML 文件扩展名是.yaml
。 Python 中有两个用于 YAML 的模块:PyYAML 和 ruamel.yaml。 在本教程中,我们使用前者。
PyYAML
PyYAML 是 Python 的 YAML 解析器和发射器。
该模块通过 pip 安装。
YAML 文件
在本教程中,我们使用以下 YAML 文件:
items.yaml
| raincoat: 1
coins: 5
books: 23
spectacles: 2
chairs: 12
pens: 6
|
我们有几个标量值。
data.yaml
| cities:
- Bratislava
- Kosice
- Trnava
- Moldava
- Trencin
---
companies:
- Eset
- Slovnaft
- Duslo Sala
- Matador Puchov
|
我们在data.yaml
中有两个文档。 文件用---
分隔。
Python YAML 读取
在第一个示例中,我们读取了一个 YAML 文件。
read_yaml.py
| #!/usr/bin/env python3
import yaml
with open('items.yaml') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
|
我们打开items.yaml
文件,并使用yaml.load()
方法加载内容。 数据被打印到控制台。
| $ python read_yaml.py
{'raincoat': 1, 'coins': 5, 'books': 23, 'spectacles': 2, 'chairs': 12, 'pens': 6}
|
PyYAML 模块将标量值转换为 Python 字典。
Python YAML 阅读文档
使用load_all()
读取多个 YAML 文档。
read_docs.py
| #!/usr/bin/env python3
import yaml
with open('data.yaml') as f:
docs = yaml.load_all(f, Loader=yaml.FullLoader)
for doc in docs:
for k, v in doc.items():
print(k, "->", v)
|
该示例从data.yaml
文件中读取两个文档。
| $ python read_docs.py
cities -> ['Bratislava', 'Kosice', 'Trnava', 'Moldava', 'Trencin']
companies -> ['Eset', 'Slovnaft', 'Duslo Sala', 'Matador Puchov']
|
Python YAML 转储
dump()
方法将 Python 对象序列化为 YAML 流。
dumping.py
| #!/usr/bin/env python3
import yaml
users = [{'name': 'John Doe', 'occupation': 'gardener'},
{'name': 'Lucy Black', 'occupation': 'teacher'}]
print(yaml.dump(users))
|
在示例中,我们有一个词典列表。 我们使用dump()
方法将列表序列化为 YAML 格式。
| $ python dumping.py
- name: John Doe
occupation: gardener
- name: Lucy Black
occupation: teacher
|
Python YAML 写入
以下示例将 Python 数据写入 YAML 文件。
writing.py
| #!/usr/bin/env python3
import yaml
users = [{'name': 'John Doe', 'occupation': 'gardener'},
{'name': 'Lucy Black', 'occupation': 'teacher'}]
with open('users.yaml', 'w') as f:
data = yaml.dump(users, f)
|
该示例将词典列表写入users.yaml
文件。
| data = yaml.dump(users, f)
|
我们使用dump()
方法写入数据。 第一个参数是数据,第二个参数是文件对象。
Python YAML 排序键
我们可以使用dump's
sort_keys
参数对键进行排序。
sort_keys.py
| #!/usr/bin/env python3
import yaml
with open('items.yaml') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
sorted = yaml.dump(data, sort_keys=True)
print(sorted)
|
该示例从items.yaml
文件中读取数据,并通过 YAML 输出中的键对数据进行排序。
| $ python sort_keys.py
{'raincoat': 1, 'coins': 5, 'books': 23, 'spectacles': 2, 'chairs': 12, 'pens': 6}
books: 23
chairs: 12
coins: 5
pens: 6
raincoat: 1
spectacles: 2
|
记号
解析 YAML 文件时,我们可以使用较低级别的 API。 scan()
方法扫描 YAML 流并生成扫描记号。
tokens.py
| #!/usr/bin/env python3
import yaml
with open('items.yaml') as f:
data = yaml.scan(f, Loader=yaml.FullLoader)
for token in data:
print(token)
|
该示例扫描 YAML 文件并打印记号。
| $ python tokens.py
StreamStartToken(encoding=None)
BlockMappingStartToken()
KeyToken()
ScalarToken(plain=True, style=None, value='raincoat')
ValueToken()
ScalarToken(plain=True, style=None, value='1')
KeyToken()
ScalarToken(plain=True, style=None, value='coins')
ValueToken()
ScalarToken(plain=True, style=None, value='5')
KeyToken()
ScalarToken(plain=True, style=None, value='books')
ValueToken()
ScalarToken(plain=True, style=None, value='23')
KeyToken()
ScalarToken(plain=True, style=None, value='spectacles')
ValueToken()
ScalarToken(plain=True, style=None, value='2')
KeyToken()
ScalarToken(plain=True, style=None, value='chairs')
ValueToken()
ScalarToken(plain=True, style=None, value='12')
KeyToken()
ScalarToken(plain=True, style=None, value='pens')
ValueToken()
ScalarToken(plain=True, style=None, value='6')
BlockEndToken()
StreamEndToken()
|
在本教程中,我们使用 Python 中的 YAML 格式。