Python读写yaml文件
- 2019 年 10 月 10 日
- 筆記
yaml文件介绍
yaml是一个专门用来写配置文件的语言。
yaml文件规则
- 区分大小写;
- 使用缩进表示层级关系;
- 使用空格键缩进,而非Tab键缩进
- 缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
- 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
- 注释标识为#
yaml文件数据结构
- 对象:键值对的集合(简称 "映射或字典"),键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
- 数组:一组按序排列的值(简称 "序列或列表"),数组前加有 “-” 符号,符号与值之间需用空格分隔
- 纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
- None值可用null可 ~ 表示
Python的yaml库
pip install pyyaml
使用yaml
from ruamel import yaml
使用
在我们做自动化测试中,可用作配置文件,配置一些服务器域名、mysql配置、登录信息、toekn等很方便快速读取
将字典写入yaml文件
desired_caps = { 'platformName':'Android哈哈哈',#移动设备系统IOS或Android 'platformVersion':'7.1.2',#Android手机系统版本号 'deviceName':'852',#手机唯一设备号 'app':'C:\Users\wangli\Desktop\kbgz-v5.9.0-debug.apk',#APP文件路径 'appPackage':'com',#APP包名 'appActivity':'cui.setup.SplashActivity',#设置启动的Activity 'noReset':'True',#每次运行不重新安装APP 'unicodeKeyboard':'True', #是否使用unicode键盘输入,在输入中文字符和unicode字符时设置为true 'resetKeyboard':'True',#隐藏键盘 'autoGrantPermissions':'True', 'autoAcceptAlerts':["python","c++","java"], 'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'} } with open("test.yaml","w",encoding="utf-8") as f: yaml.dump(desired_caps,f,Dumper=yaml.RoundTripDumper)
写入文件如下:
deviceName: '852' unicodeKeyboard: 'True' autoAcceptAlerts: - python - c++ - java autoGrantPermissions: 'True' platformVersion: 7.1.2 platformName: "Androidu54C8u54C8u54C8" app: C:UserswangliDesktopkbgz-v5.9.0-debug.apk appPackage: com chromeOptions: androidProcess: com.tencent.mm:tools appActivity: cui.setup.SplashActivity noReset: 'True' resetKeyboard: 'True'
将列表写入yaml文件
list=['python','java','c++','C#',{'androidProcess': 'com.tencent.mm:tools'},["python","c++","java"]] with open("test.yaml","w",encoding="utf-8") as f: yaml.dump(list,f,Dumper=yaml.RoundTripDumper)
写入文件如下:
- python - java - c++ - C# - androidProcess: com.tencent.mm:tools - - python - c++ - java
读取yaml文件中字典
用python读取yaml文件案例,先用open方法读取文件数据,再通过load方法转成字典,这个load跟json里面的load是相似的,yaml文件内容:
chromeOptions: androidProcess: com.tencent.mm:tools appActivity: cui.setup.SplashActivity noReset: 'True' app: C:UserswangliDesktopkbgz-v5.9.0-debug.apk appPackage: com platformVersion: 7.1.2 resetKeyboard: 'True' autoGrantPermissions: 'True' deviceName: '852' autoAcceptAlerts: - python - c++ - java unicodeKeyboard: 'True' platformName: "Androidu54C8u54C8u54C8"
读取yaml
with open('test.yaml', 'r', encoding='utf-8') as f: print(yaml.load(f.read(),Loader=yaml.Loader))
读出内容如下
{'platformVersion': '7.1.2', 'resetKeyboard': 'True', 'appPackage': 'com', 'autoAcceptAlerts': ['python', 'c++', 'java'], 'autoGrantPermissions': 'True', 'deviceName': '852', 'appActivity': 'cui.setup.SplashActivity', 'unicodeKeyboard': 'True', 'noReset': 'True', 'platformName': 'Android哈哈哈', 'app': 'C:\Users\wangli\Desktop\kbgz-v5.9.0-debug.apk', 'chromeOptions': {'androidProcess': 'com.tencent.mm:tools'}}
读取yaml文件中列表
yaml文件内容 - python - java - c++ - C# - androidProcess: com.tencent.mm:tools - - python - c++ - java
读取yaml文件
with open('test.yaml', 'r', encoding='utf-8') as f: print(yaml.load(f.read(),Loader=yaml.Loader))
读取出内容如下
"C:Program FilesPython35python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py ['python', 'java', 'c++', 'C#', {'androidProcess': 'com.tencent.mm:tools'}, ['python', 'c++', 'java']] Process finished with exit code 0