Python读写YAML文件完全指南:语法、安装与实战示例
本文详细介绍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文件的教程介绍完毕。如需了解更多相关内容,建议查阅本站过往文章或继续浏览后续教程,感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









