YAML文件处理

什么是YAML文件

YAML全称其实是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写,所以它强调的是数据本身,而不是以标记为重点。

YAML 是一种可读性非常高,与程序语言数据结构非常接近。同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言。

为什么要使用YAML文件

其实YAML文件也是一种配置文件,但是相较于ini,conf配置文件来说,更加的简洁,操作简单,还能存放不同类型的数据,而像ini存储的值就都是字符串类型,读取之后还要手动转换。

YAML的基本语法规则
  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进时不允许使用Tab键,只允许使用空格。(可以将你的ide的tab按键输出替换成4个空格)

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  • # 表示注释

YAML 的数据结构
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

  • 纯量(scalars):单个的、不可再分的值

对象类型

对象的一组键值对,使用冒号结构表示,会转换成 Python 中的字典。

YAML:

animals:dog

Python:

{'animals': 'dog'}

YAML:

person:{name:Tom, age:20, gender:male}

Python:

{'person': {'name': 'Tom', 'age': 20, 'gender': 'male'}}
数组类型

数组类型使用 - 为前缀,每个元素独占一行,通过缩进关系表示层级包含关系,会转换成 Python 中的列表。

YAML:


-one

-two

-three

-four

-five

Python:

['one', 'two', 'three', 'four', 'five']

YAML:


-

-1

-2

-3

-

-4

-5

-6

Python:

[[1, 2, 3], [4, 5, 6]]
纯量类型

纯量类型是最基本的、不可再分的值;类似基本数据类型。

  • 字符串, 不需要使用双引号包裹

  • 布尔值,true,True,false,False都可以

  • 整数

  • 浮点数

  • 时间,时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

  • 日期,日期必须使用ISO 8601格式,即 yyyy-MM-dd

  • Null,~ 表示 Null

YAML:


int: 12

float: 12.3

string: pets

bool: true

None: null

time: 2001-12-14t21:59:43.10-05:00

date: 2018-03-21

Python:


{

'int': 12,

'float': 12.3,

'string': 'pets',

'bool': True,

'None': None,

'time': datetime.datetime(2001, 12, 14, 21, 59, 43, 100000, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400))),

'date': datetime.date(2018, 3, 21)

}
复杂结构

YAML:



cool_list:

- 10

- 15

- 12


hard_list:

- {key: value}

- [1,2,3]

- test:

- 1

- 2

- 3


twice_list:

-

- {a: AA}

- {b: BB}

- {c: CC}

Python:



{

'cool_list': [10, 15, 12],

'hard_list': [

{'key': 'value'},

[1, 2, 3],

{

'test': [1, 2, 3]

}

],

'twice_list':[

[

{'a': 'AA'},

{'b': 'BB'},

{'c': 'CC'}

]

]

}

Tips:有 : 后面的内容就解析成字典,有 - 后面的内容就解析成列表的元素

YAML 文件处理

Python 中,可以使用第三方模块 PyYAML 来处理 YAML 文件。

安装 PyYAML 模块
pip install pyyaml
读取 YAML 文件

YAML 模块使用 safe_load() 方法读取 yaml 文件,在读取文件之前,和普通文件一样,需要先将文件打开。


import yaml


# 读取 YAML 文件, 以前面复杂结果数据为例

with open('data.yaml', 'r') as file:

data = yaml.safe_load(file)


# 处理读取到的数据

print(data['cool_list'])

print(data['hard_list'][2]['test'])
写入 YAML 文件

YAML 模块使用 safe_dump() 方法向 yaml 文件中写入数据,在写入文件之前,也需要先将文件打开。


import yaml


# 要写入的数据

data = {

'key1': 'value1',

'key2': 'value2',

'key3': {

'key4': 'value4'

}

}


# 写入 YAML 文件

with open('output.yaml', 'w') as file:

yaml.safe_dump(data, file)

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末自行领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐