开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python YAML

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教程。

未经允许不得转载:我爱分享网 » Python YAML

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏