yaml简介读取及修改

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dengachao/article/details/100536088

yaml简介

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

Yaml 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

YAML特别适合在脚本语言中使用。列一下现有的语言实现:Ruby,Java,Perl,Python,PHP,JavaScript等。

YAML 是专门用来写配置文件的语言:

例子:

yaml

name: Tom Smith

age: 37

spouse:

    name: Jane Smith

    age: 25

children:

 - name: Jimmy Smith

   age: 15

 - name: Jenny Smith

   age: 12

语法特点

- 大小写敏感 
- 使用缩进表示层级关系 
- 缩进时不允许使用Tab键,只允许使用空格。 
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

-以#号作为注释符

yaml数据类型详解

支持数据类型

  1. 纯量(scalars):单个的、不可再分的值
  2. 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  3. 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

纯量

数据最小的单位,不可以再分割。类似于Python中单个变量

flag

list数组

与Python的list数组结构类似,数组元素使用“-”开头,也可以根据缩进进行数组嵌套。

- Jack

- Harry

- Sunny

 

# 也可以写成一行

[Jack,Harry,Sunny]

对应到python的list写法如下:

['Jack','Harry','Sunny']

扩展学习:Python数据类型视频教程

对象

对象的一组键值对,使用冒号结构表示。类似Python中的字典数据结构。

platformName: Android

platformVersion: 6.0.1

 

# Yaml 也允许另一种写法,将所有键值对写成一个行内对象。

{platformName: Android,platformVersion: 6.0.1}

注意:冒号后面一定要有空格!对应到python字典的写法如下:

{'platformName': 'Android', 'platformVersion': '6.0.1'}

数据嵌套

yaml数据嵌套表示可以将上面的各类数据根据实际场景进行组合嵌套。

数据场景

Tom Smith 37岁,他有一个妻子叫 Jane Smith,25岁。 另外他有2个孩子,一个叫Jimmy Smith,15岁;另外一个叫Jenny Smith ,12岁。

yaml语法表示如下:

familyInfo.yaml

name: Tom Smith

age: 37

spouse:

    name: Jane Smith

    age: 25

children:

 - name: Jimmy Smith

   age: 15

 - name: Jenny Smith

   age: 12

转化为Python的写法为:

{'name':'Tom Smith','age':37,'spouse':{'name':'Jane Smith','age':25},'childern':[{'name':'Jimmy Smith','age':15},{'name':'Jenny Smith','age':12}]}

yaml数据操作

数据读取

测试场景

  • 读取配置中的所有信息
  • 读取yaml数据表中Tom Smith的姓名、年龄、信息
  • 单独读取配偶的姓名和年龄信息
  • 分别读取两个孩子的姓名、年龄信息

load方法

load(stream, Loader=Loader) 解析文件流中的第一个YAML文档并生成相应的Python对象。

代码实现

yaml_load.py

import yaml

file = open('familyinfo.yaml','r')
data = yaml.load(file,Loader=yaml.FullLoader)

print(data)
print(data['name'])
print(data['age'])

print(data['spouse'])
print(data['spouse']['name'])
print(data['spouse']['age'])

print(data['children'])
print(data['children'][0]['name'])
print(data['children'][0]['age'])

print(data['children'][1]['name'])
print(data['children'][1]['age'])
#数据的修改
data['name'] = 'test'
print(data['name'])

 

 

数据修改

如果想改变某个数据,可以使用如下方法:

data['name']='test'

print(data['name'])

注意:此处只是变量类型的数据变更,不会真正修改到yaml配置表中的数据。

猜你喜欢

转载自blog.csdn.net/dengachao/article/details/100536088