🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Python YAML 教程 > 原文: [http://zetcode.com/python/yaml/](http://zetcode.com/python/yaml/) Python YAML 教程展示了如何在 Python 中使用 YAML 格式。 我们使用 PyYAML 模块。 ## YAML 格式 YAML(不是 YAML 标记语言)是一种人类可读的数据序列化语言。 它通常用于配置文件,但也用于数据存储(例如调试输出)或传输(例如文档标题)。 YAML 本机支持三种基本数据类型:标量(例如字符串,整数和浮点数),列表和关联数组。 官方推荐的 YAML 文件扩展名是`.yaml`。 Python 中有两个用于 YAML 的模块:PyYAML 和`ruamel.yaml`。 在本教程中,我们使用前者。 ## PyYAML PyYAML 是 Python 的 YAML 解析器和发射器。 ```py $ pip install pyyaml ``` 该模块通过 pip 安装。 ## YAML 文件 在本教程中,我们使用以下 YAML 文件: `items.yaml` ```py raincoat: 1 coins: 5 books: 23 spectacles: 2 chairs: 12 pens: 6 ``` 我们有几个标量值。 `data.yaml` ```py cities: - Bratislava - Kosice - Trnava - Moldava - Trencin --- companies: - Eset - Slovnaft - Duslo Sala - Matador Puchov ``` 我们在`data.yaml`中有两个文档。 文件用`---`分隔。 ## Python YAML 读取 在第一个示例中,我们读取了一个 YAML 文件。 `read_yaml.py` ```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()`方法加载内容。 数据被打印到控制台。 ```py $ 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` ```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`文件中读取两个文档。 ```py $ python read_docs.py cities -> ['Bratislava', 'Kosice', 'Trnava', 'Moldava', 'Trencin'] companies -> ['Eset', 'Slovnaft', 'Duslo Sala', 'Matador Puchov'] ``` 这是输出。 ## Python YAML 转储 `dump()`方法将 Python 对象序列化为 YAML 流。 `dumping.py` ```py #!/usr/bin/env python3 import yaml users = [{'name': 'John Doe', 'occupation': 'gardener'}, {'name': 'Lucy Black', 'occupation': 'teacher'}] print(yaml.dump(users)) ``` 在示例中,我们有一个字典列表。 我们使用`dump()`方法将列表序列化为 YAML 格式。 ```py $ python dumping.py - name: John Doe occupation: gardener - name: Lucy Black occupation: teacher ``` 这是输出。 ## Python YAML 写入 以下示例将 Python 数据写入 YAML 文件。 `writing.py` ```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`文件。 ```py data = yaml.dump(users, f) ``` 我们使用`dump()`方法写入数据。 第一个参数是数据,第二个参数是文件对象。 ## Python YAML 排序键 我们可以使用`dump`的`sort_keys`参数对键进行排序。 `sort_keys.py` ```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 输出中的键对数据进行排序。 ```py $ 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` ```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 文件并打印记号。 ```py $ 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 格式。 您可能也对以下相关教程感兴趣: [Python 字符串](/lang/python/strings/), [Python Jinja 教程](/python/jinja/)和 [Python 教程](/lang/python/),或列出[所有 Python 教程](/all/#python) 。