Python读写YAML文件完全指南:语法、安装与实战示例

Leo
Leo
发布时间:2026-10-14 | 6人浏览过
原创

本文详细介绍Python中YAML文件的读写方法。涵盖YAML基础语法规则、字典与列表结构、纯量类型处理及数据类型强制转换。通过PyYAML库的安装步骤,结合嵌套数据读取与文件写入的完整代码示例,帮助开发者掌握自动化测试与配置管理中的YAML应用技巧。

YAML简介与基本语法

YAML简介

YAML(发音为 /ˈjæməl/)全称为 Yet Another Markup Language,即另一种标记语言。它是一种专为编写配置文件而设计的语言,以简洁性和强大功能著称。虽然INI文件也可用于配置,但YAML在直观性和便捷性上更胜一筹,其结构类似于JSON格式。在自动化测试领域,YAML的使用频率极高,因此熟练掌握其读写操作至关重要。

YAML基本语法规则:

  • 大小写敏感。
  • 层级关系通过缩进表示。
  • 缩进时严禁使用Tab键,必须且仅允许使用空格。
  • 缩进所需的空格数量没有严格限制,关键在于同一层级的元素必须保持左侧对齐。
  • 使用#符号表示注释,从该字符开始直至行尾的内容均会被解析器忽略,这与Python的注释规则一致。

YAML支持三种主要数据结构:

  • 对象:即键值对的集合,在YAML中也被称为映射(mapping)、哈希(hashes)或字典(dictionary)。
  • 数组:一组按顺序排列的值,在YAML中称为序列(sequence)或列表(list)。
  • 纯量(scalars):指单个且不可再分的值,包括字符串、布尔值、整数、浮点数、Null、时间戳和日期。

安装PyYAML库

安装YAML支持库

通过pip命令安装pyyaml模块即可启用Python对YAML的支持。


pip install pyyaml

YAML数据结构与书写格式

Python各数据类型在YAML中的书写格式

YAML中的键值对对应Python中的字典(dict)类型。以下是如何在YAML文件中表示Python字典的示例。


# python3.6
{
"user": '测试',
"psw": 123456,
}

在YAML文件中,字典可以按以下方式书写:


# yaml
user:测试
psw: 123456 

对于嵌套字典的情况,YAML文件中的写法如下:


# python3.6
"nb1": {
 "user": "测试",
 "psw": "123456,
 }

在YAML文件中,嵌套字典的具体写法为:


# yaml
nb1:
 user: 测试
 psw: 123456

序列(list)类型

在YAML中表示数组时,需在每个元素前添加'-'符号,示例如下:


- admin1: 123456
- admin2: 111111
- admin3: 222222

上述YAML结构在Python中对应list类型。


[{'admin1': 123456},
{'admin2': 111111}, 
{'admin3': 222222}]

需要注意的是,YAML中的数字在Python中会被解析为int或float类型。

纯量(str)及其他类型处理

对于int和float类型的数字,YAML中的写法示例如下:


n1: 12.30 

对应的Python解析结果如下:


{'n1': 12.3}

布尔值在YAML中使用true和false表示,示例如下:


n2: true 
n3: false 

对应的Python解析结果如下:


{'n2': True, 'n3': True}

Null值在YAML中使用~符号表示,示例如下:


n4: ~

对应的Python解析结果如下:


{'n4': None}

时间戳采用ISO8601格式,示例如下:


time1: 2001-12-14t21:59:43.10-05:00 

对应的Python解析结果如下:


{'time1': datetime.datetime(2001, 12, 15, 2, 59, 43, 100000)}

日期采用复合ISO8601格式,由年、月、日组成,示例如下:


date1: 2017-07-31

对应的Python解析结果如下:


{'date1': datetime.date(2017, 7, 31)}

若需强制转换数据类型,可使用两个感叹号(!!)作为前缀,示例如下:


# int转str
n6: !!str 123

对应的Python解析结果如下:


{'n6': '123'}
# bool值转str
n7: !!str true

另一种强制转换示例,将布尔值转为字符串,结果如下:


{'n7': 'true'}

在YAML文件中写入包含上述各种类型的混合内容,示例如下:


n1: 12.30
n2: true
n3: false
n4: ~
time1: 2018-04-18t21:59:43.10+08:00
date1: 2018-04-18
n6: !!str 123
n7: !!str true

Python读取该YAML文件后的结果如下:


{'n1': 12.3, 
'n2': True, 
'n3': False, 
'n4': None, 
'time1': datetime.datetime(2018, 4, 18, 13, 59, 43, 100000), 
'date1': datetime.date(2018, 4, 18), 
'n6': '123', 
'n7': 'true'}

混合数据结构的使用

对于list嵌套dict的情况,在YAML文件中写入如下内容:


- user: admin1
 psw: '123456'

- user: admin2
 psw: '111111'

- user: admin3
 psw: '222222'

Python读取上述YAML文件后的结果如下:


[{'user': 'admin1', 'psw': '123456'},
{'user': 'admin2', 'psw': '111111'},
{'user': 'admin3', 'psw': '222222'}]

对于dict嵌套list的情况,在YAML文件中写入如下内容:


nub1:
 - admin1
 - '123456'

nb2:
 - admin2
 - '111111'

nb3:
 - admin3
 - '222222'

Python读取上述YAML文件后的结果如下:


{'nub1': ['admin1', '123456'],
'nb2': ['admin2', '111111'], 
'nb3': ['admin3', '222222']}

Python读写YAML文件实战

读取YAML文件

以下是读取login.yaml文件内容的代码示例。

写入数据到YAML文件

总结

至此,关于Python读取和写入YAML文件的教程介绍完毕。如需了解更多相关内容,建议查阅本站过往文章或继续浏览后续教程,感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表