YAML

YAML

可用来编写配置文件的语言。查看工具:http://nodeca.github.io/js-yaml/

1.yaml文件规则

区分大小写;
使用缩进表示层级关系;
使用空格键缩进,而非Tab键缩进
缩进的空格数目不固定,只需要相同层级的元素左侧对齐;
文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;
注释标识为#

在python中使用:需先安装pyyaml模块

pip install pyyaml

2.数据结构

对象:即字典,用冒号表示,格式为key: value。冒号后面要加一个空格;

key:
 name: han
 text: word
id: 
 sex:

表示为:

{ key: { name: 'han', text: 'word' }, id: { sex: '女' } }

数组:即列表,使用一个短横线加一个空格代表一个数组项;

- 
 - id: id1
 - text
 - xpath
- 
 - id2: id3

表示为:

[ [ { id: 'id1' }, 'text', 'xpath' ], [ { id2: 'id3' } ] ]

综合:

- id: id1
- xpath: path1
- xpath: path2
  input: word
- id : id2
  get:  text
  assert: word2
- id: id3

同层级的- 归属于一个列表,列表内由各个dict组成,同层级的对象同属于一个dict内,以上表示为:

[ { id: 'id1' },
  { xpath: 'path1' },
  { xpath: 'path2', input: 'word' },
  { id: 'id2', get: 'text', assert: 'word2' },
  { id: 'id3' } ]

常量:YAML中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。

特殊符号
--- YAML可以在同一个文件中,使用—表示一个文档的开始,多个文档在一个yaml文件,使用 --- 分隔方式来分段。
...在一个配置文件中代表一个文件的结束

---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
---
time: 20:03:47
player: Sammy Sosa
action: grand slam

相当于在一个yaml文件中连续写了两个yaml配置项。

引用:重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点引用

key: 
 - &id 1007
 - &name han
 - xpath: path

user:
 - *id
 - *name
 - han: null

表示为:

{ key: [ 1007, 'han', { xpath: 'path' } ],
  user: [ 1007, 'han', { han: null } ] }

3.python脚本使用

(1)读取yaml文件

def yaml_load(yaml_file):
    file = open(yaml_file,'r',encoding='utf-8')
    file_data = file.read()
    print(file_data)
    file.close()
    yaml_data = yaml.safe_load(file_data)
    for i in yaml_data:
        print(i)

(2)读取一个yaml文件中多个文档
使用load_all函数来解析全部的文档,再从中读取对象中的数据。

yaml文件:

---
- name: hanqingqing
  sex: '女'
  old: 24
- name: yanping
  sex: '女'
  old: 22
---
key:
  - name
  - sex
  - old
value:
  - hanqingqing
  - 'mv'
  - 24
#读取yaml文件的多个文档
def yaml_load_all(yaml_file):
    file = open(yaml_file,'r',encoding='utf-8')
    file_data = file.read()
    print(file_data)
    file.close()
    yaml_data = yaml.load_all(file_data)
    for i in yaml_data:
        print(i)
path = os.path.abspath(".")
yaml_path = os.path.join(path, 'test.yaml')
yaml_load_all(yaml_path)

输出为:

[{'name': 'hanqingqing', 'sex': '女', 'old': 24}, {'name': 'yanping', 'sex': '女', 'old': 22}]
{'key': ['name', 'sex', 'old'], 'value': ['hanqingqing', 'mv', 24]}

(3)python对象生成yaml文档
方法一:yaml.dump()方法(有些博客说这个方法不能直接生成yaml标准格式,但试了一下貌似可以直接生成?)

def yaml_dump(yaml_file):
    file = open(yaml_file,'w',encoding='utf-8')
    project = {'key': ['name', 'sex', 'old'], 'value': ['hanqingqing', 'mv', 24]}
    yaml.dump(project,file)
    file.close()

方法二:使用ruamel模块中的yaml方法
前提条件:需提前安装ruamel.yaml模块,pip3 install ruamel.yaml

def ruamel_yaml_dump(yaml_file):
    file = open(yaml_file, 'w', encoding='utf-8')
    project = [{'name': 'hanqingqing', 'sex': '女', 'old': 24}, {'name': 'yanping', 'sex': '女', 'old': 22}]
    yaml.dump(project,file,Dumper=yaml.RoundTripDumper)
    file.close()
path = os.path.abspath(".")
yaml_path2 = os.path.join(path, 'dump.yaml')
ruamel_yaml_dump(yaml_path2)

生成的yaml文件:

- name: hanqingqing
  sex: "\u5973"
  old: 24
- name: yanping
  sex: "\u5973"
  old: 22
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值