首页 > 编程笔记 > Python笔记 阅读:10

Python PyYAML包的用法(附带实例)

PyYAML 是一个用于解析和生成 YAML 数据的第三方 Python 包,它可以完成 Python 数据与 YAML 数据的相互转换。

本文中 PyYAML 的版本是 6.0 版本。PyYAML 的安装命令是:
pip install pyyaml==6.0
需要注意的是,PyYAML 在 Python 代码中导入的包名是 yaml。

YAML数据转换为Python数据

YAML 数据一般被保存在 YAML 文件中,为了演示 PyYAML,需要创建一个文件名为 demo.yml 的 YAML 文件,其内容可参考如下的代码:
device:
  name: netdevops01
  ip: 192.168.137.1
  vendor: 华为
  online: true
  rack: '0101'
  start_u: 20
  end_u: 21
  interface_usage: 0.67
  interfaces:
    - eth1/1
    - eth1/2
    - eth1/3
  uptime: null
使用 yaml 模块中的 safe_load() 函数,可以将指定的 YAML 文件安全地转换为 Python 数据,这个函数只有 stream 一个参数,需要将其赋值为文本文件对象。使用 safe_load() 函数将 YAML 数据转换为 Python 数据,代码如下:
import yaml
 
with open('demo.yml', encoding='utf8') as f:
   data = yaml.safe_load(stream=f)
   print(data)

PyYAML 还提供了 safe_load_all() 函数,可以将多文档的 YAML 文件转换为 Python 数据,它的参数与 safe_load() 完全一致,返回结果是生成器对象。

读者可以使用 for 循环遍历生成器中的成员。YAML 的数据量一般不是很大,也可以将其强制转换为 list 列表类型来访问其中的数据。使用 safe_load_all() 函数将 YAML 数据转换为 Python 数据,代码示例如下:
import yaml
 
with open('demo2.yml', encoding='utf8') as f:
    data = yaml.safe_load_all(f)
 
    data = list(data)
    print(data)

demo2.yml中的内容如下:
# this is a play list
---
- name: play 01
  host: huawei_devs
 
- name: play 02
  host: huawei_devs
---
- name: play 01
  host: cisco_devs
 
- name: play 02
  host: cisco_devs

Python数据转换为YAML数据

Python 基础数据对象可以转换为 YAML 格式,并保存到文件中。YAML 更适合人工编写,然后由程序解析,通过程序生成 YAML 文件的场景相对较少,因此读者了解其基本使用方法即可。

通过 dump() 函数可将 Python 数据转换为 YAML 数据。读者需要掌握以下4个参数:
使用 dump() 函数将 Python 数据转换为 YAML 数据并写入文件,代码如下:
import yaml
 
python_data = {'device': {'name': 'netdevops01', 'ip': '192.168.137.1',
                          'vendor': '华为', 'online': True, 'rack': '0101',
                          'start_u': 20, 'end_u': 21, 'interface_usage': 0.67,
                          'interfaces': ['eth1/1', 'eth1/2', 'eth1/3'],
                          'uptime': None}
               }
with open('dump_demo.yml', mode='w', encoding='utf8') as f:
    yaml.dump(python_data, stream=f, allow_unicode=True, sort_keys=False)

相关文章