PythonYAML教程展示了如何在Python中使用YAML格式。我们使用pyyaml模块。
YAML格式
YAML(YAML不是标记语言)是一种人类可读的数据序列化语言。它通常用于配置文件,但也用于数据存储(如调试输出)或传输(如文件头)。
YAML原生支持三种基本数据类型:标量(例如字符串、整数和浮点数)、列表和关联数组。
官方推荐的YAML文件扩展名是.yaml
。YAML在Python中有两个模块:PyYAML和ruamel.yaml。在本教程中,我们使用前者。
PyYAML
PyYAML是Python的YAML解析器和发射器。
$ pip install pyyaml
模块是用pip安装的。
YAML文件
在本教程中,我们使用以下YAML文件:
raincoat: 1 coins: 5 books: 23 spectacles: 2 chairs: 12 pens: 6
我们有几个标量值。
cities: - Bratislava - Kosice - Trnava - Moldava - Trencin --- companies: - Eset - Slovnaft - Duslo Sala - Matador Puchov
data.yaml
中有两个文件。文档用---
分隔。
PythonYAML读取
在第一个示例中,我们读取了一个YAML文件。
#!/usr/bin/python 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字典。
PythonYAML读取文件
使用load_all
读取多个YAML文档。
#!/usr/bin/python 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']
PythonYAML转储
dump
方法将Python对象序列化为YAML流。
#!/usr/bin/python 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
PythonYAML编写
以下示例将Python数据写入YAML文件。
#!/usr/bin/python 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
方法写入数据。第一个参数是数据,第二个是文件对象。
PythonYAML排序键
我们可以使用dump的
sort_keys
参数对键进行排序。
#!/usr/bin/python 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流并生成扫描令牌。
#!/usr/bin/python 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格式。
列出所有Python教程。