一、环境安装

 安装:pip install pyyaml

 使用:import yaml

二、yaml文件

  基本语法规则

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进时不允许使用Tab键,只能使用空格。
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  5. # 表示注释,从这个字符一直到行尾,都会被解析器忽略,这个和python的注释一样
  •   yaml支持的数据结构有三种
  1. 对象:键值对的集合,又称映射/哈希/字典
  2. 数组:一组按次序排列的值,又称为序列/列表
  3. 纯量:单个的、不可再分割的值,字符串、布尔值、整数、浮点数、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)