一、环境安装
安装:pip install pyyaml
使用:import yaml
二、yaml文件
基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只能使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
- yaml支持的数据结构有三种
- 对象:键值对的集合,又称映射/哈希/字典
- 数组:一组按次序排列的值,又称为序列/列表
- 纯量:单个的、不可再分割的值,字符串、布尔值、整数、浮点数、Null、时间、日期
#整型
num: 200
#浮点型
pi: 3.1415926
#布尔型
enable: true #TRUE, true都可以
switch0ff: false #FALSE,false都可以
#字符串
name: Ken
fullname: "Ken KK" #单引号,双引号可以修饰特殊字符
#日期
date: 2021-05-21
#时间
#格式为ISO 8601,日期和时间用T连接,+表示时区,示例为东八区
time: 2021-05-21T12:00:00+08:00
#Null
object: ~ #~表示为null,即空的意思
map数据格式:
maps:
name: zhangsan
age: 12
list数据结构:
# 数组
icons:
- aaa #数组第0个元素
- bbb #数组第一个元素
# list
ages:
- 10
- 20
也可以表示为:比较随意,只要相同层级的元素左侧对齐即可
# 数组
icons:
- aaa #数组第0个元素
- bbb #数组第一个元素
# list
ages:
- 10
- 20
对象数据结构:
#对象
person:
age: 12
maps:
aa: aaa
bb: bb
host: 127.0.0.1
三、python读取yaml文件
yaml文件:
mysql:
host: 127.0.0.1
port: 3306
db: mysql
pwd: mysql
redis:
host: 127.0.0.1
port: 3679
db: redis
pwd: redis
读取yaml文件:
import yaml
import json
yamlPath = r"E:\code\config.yml"
f = open(yamlPath,'r',encoding='utf-8')
data = yaml.load(f, Loader=yaml.FullLoader)
print(json.dumps(data, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False))
with语句读取:
import yaml
yamlPath = r"E:\code\config.yml"
with open(file=yamlPath, mode="rb") as f:
infos = yaml.load(f, Loader=yaml.FullLoader)
print(infos)
四、写入yaml文件:
import yaml
yamlPath = r"E:\code\config.yml"
f = open(yamlPath,'a',encoding='utf-8')
data = {
"username": "zs",
"age": 18,
"hobby": ["Basketball", "eat", True]
}
yaml.dump(data, f)
五、案例:
import yaml
desired_caps = {
'platformName': 'Android', # 被测手机是安卓
'platformVersion': 'platformVersion', # 手机安卓版本
'deviceName': 'deviceName', # 设备名,安卓手机可以随意填写
'appPackage': 'com.mobivans.onestrokecharge', # 启动APP Package名称
'appActivity': 'com.mobivans.onestrokecharge.activitys.MainActivity', # 启动Activity名称
'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True
'resetKeyboard': True, # 执行完程序恢复原来输入法
'noReset': True, # 不要重置App
'newCommandTimeout': 60000,
'udid': {"devicesname":"127.0.0.1:62001"}
}
# 将以上字典写入到yaml文件
with open('desired_caps.yaml', 'w', encoding='utf-8') as f:
# 将字典写入到yaml文件中
yaml.dump(desired_caps, f)
六、常用yaml文件格式
# 注释
# 1-1、字典 键: 值
username: xiaoming # 冒号后面是空格
password: 123456
info: 配置 # 中文---不建议使用,有可能会乱码
# 1-2、字典嵌套
NAME_PSW:
name:xiaoming
password:123456
# 2-1、列表格式
-10
-20
-30
# 2-2、列表嵌套
-10
-20
-
-100
-200
# 3-1、列表中套字典
-10
-20
-
name: tom
password: 123456
# 4-1、字典套列表
name: TOM
info:
-10
-20
-30
# 5-1、引号 如果是有英文字母或者中文的,不加引号也是字符串
info: "HELLO word" # 引号可以不加
# 5-2、什么加引号:如果有特俗字符\n 不加引号就原字符样式输出 如果显示特殊字符效果:就加双引号
info: "HELLO\nwoord"
# 6-1、引用 一个数据可以使用很多地方,使用变量
# & 变量名 定义变量
# *变量名 引用变量
name: &a tom
name1: *a
# 7-1、能不能多个YAML 写在一起,有字典也有列表 ,加分隔符 ---
-10
-20
-30
---
name: sq
# 8-1、yamL文件可以有YAML
DATA: conf.yaml
七、读取yaml文件时报TypeError错误
解决方式:
yaml.safe_load(file.read())
yaml.load(file.read(), Loader=yaml.FullLoader)
yaml.load(file.read(), Loader=yaml.CLoader)