> 文档中心 > Python零基础入门篇 - 55 - yaml文件的读取

Python零基础入门篇 - 55 - yaml文件的读取


万叶集
🎉 隐约雷鸣 🎉 阴霾天空 🎉
🎉 但盼风雨来 🎉 能留你在此 🎉

前言
✌ 作者简介:渴望力量的哈士奇,大家可以叫我 🐶哈士奇🐶 。(我真的有一只哈士奇)
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦


📕 系列专栏:
               👍 Python全栈系列 - [更新中]     【 本文在该系列】
               👋 网安之路系列
​                       🍋 网安之路踩坑篇
​                       🍋 网安知识扫盲篇
​                       🍋 Vulhub 漏洞复现篇
​                       🍋 Shell脚本编程篇
​                       🍋 Web攻防篇   2021年9月3日停止更新,转战先知等安全社区
​                       🍋 渗透工具使用集锦  2021年9月3日停止更新,转战先知等安全社区
​                ⭐️ 点点点工程师系列
​                       🍹 测试神器 - Charles 篇
​                       🍹 测试神器 - Fiddler 篇
​                       🍹 测试神器 - Jmeter 篇
​                       🍹 自动化 - RobotFrameWork 系列
​                       🍹 自动化 - 基于 JAVA 实现的WEB端UI自动化
                       🍹 自动化 - 基于 MonkeyRunner 实现的APP端UI自动化

Python零基础入门篇 - 55 - yaml文件的读取 Python零基础入门篇 - 55 - yaml文件的读取

文章目录

    • yaml 文件的应用场景与格式介绍
      • yaml 文件的应用场景
      • yaml 文件的格式
    • 第三方包 - pyyaml
      • 读取 yaml 文件的方法
      • yaml文件读取演示案例

yaml 文件的应用场景与格式介绍

yaml 文件的应用场景

yaml其实也类似于 json、txt ,它们都属于一种文本格式。在我们的实际工作中, yaml 文件经常作为服务期配置文件来使用。 比如一些定义好的内容,并且不会修改的信息,我们就可以通过定义 yaml 文件,然后通过读取这样的文件,将数据导入到我们的服务中进行使用。

由于 yaml 文件一般作为配置文件使用,所以较少会修改。故而该章节,我们仅学习 yaml 文件的读取。

yaml 文件的格式

==首先大家需要知道,yaml 不是标记语言,跟 json 类似,yaml 的用途也是对数据进行序列化。(内容格式为键值对,但是与 dict 数据类型的键值对显示的样式有所区别)。内容格式人性化,较易读.==yaml 文件格式后缀为 .yaml

注意:YAML 有一个小的怪癖。所有的 YAML 文件开始行都应该是 —。这是 YAML 格式的一部分, 表明一个文件的开始。>

YAML语法格式如下:

1、大小写敏感
2、使用缩进表示层级关系
3、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
4、不支持Tab键制表符缩进,只使用空格缩进
5、字符后缩进一个空格,如冒号,逗号,短横杆(-)等
6、"—“表示YAML格式,一个文件的开始,用于分隔文件间
7、”#”表示注释 (yaml文件只有行注释)

YAML 支持的数据结构有三种。

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
下面对这三种数据结构做详细介绍:

yaml 中的值有以下基本类型:

字符串

整形

浮点型

布尔型

null

时间

日期

yaml 文件内容格式示例如下:

# 注释# 1-1、字典  键: 值username: xiaoming  # 冒号后面是空格password: 123456info: 配置  # 中文---不建议使用,有可能会乱码# 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: TOMinfo:   -10   -20   -30# 5-1、引号 如果是有英文字母或者中文的,不加引号也是字符串info: "HELLO word"  # 引号可以不加 # 5-2、什么加引号:如果有特俗字符\n 不加引号就原字符样式输出    如果显示特殊字符效果:就加双引号 info: "HELLO\nwoord"# 6-1、引用 一个数据可以使用很多地方,使用变量# & 变量名   定义变量# *变量名   引用变量name: &a tomname1: *a# 7-1、能不能多个YAML 写在一起,有字典也有列表  ,加分隔符  ----10-20-30---name: sq# 8-1、yamL文件可以有YAMLDATA: conf.yaml

第三方包 - pyyaml

pyyaml 的安装:pip install PyYAML [若安装失败,参考 - 包与模块 章节的 如何安装第三方包]

pyyaml 的导入:import pyyaml



读取 yaml 文件的方法

用法如下:

file = open(yaml_file, 'r')daya = yaml.load(file.read())file.close

返回字典类型(示例):

{    'name': '托尼·史塔克'    'age': '52'    'sex': 'man'}

yaml文件读取演示案例

创建一个 test.yaml 文件,内容如下:

name:  托尼·史塔克# 字符串引号可以不加 【这里的缩进使用的是tab键,所以如果直接复制粘贴,在运行下方脚本时会报错,记得改成空格】invention:  - Iron Man Armor  - Arc reactor  - Ultronteammate:  - Steven Rogers  - Thor Odinson  - Natasha Romanoff  - Bruce Banner  - Clint Bartonapprentice:  彼得·帕克wife:  佩珀·波兹father:  霍华德·史塔克

创建一个 test_yaml.py 文件,读取 test.yaml 文件:

# coding:utf-8import yamldef read(path):    with open(path, 'r') as file: data = file.read() result = yaml.load(data) # result = yaml.load(data, Loader=yaml.FullLoader) return resultif __name__ == '__main__':    result = read('test.yaml')    print(result)

这里执行的时候出现了一个报错 :TypeError: load() missing 1 required positional argument: 'Loader' 如下图:



这是因为在 YAML 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数,该load函数也变得更加安全。所以我们需要将 result = yaml.load(data) 改为 result = yaml.load(data, Loader=yaml.FullLoader)

解决该 TypeError 不单单 只有 yaml.load(data, Loader=yaml.FullLoader) 这一个方法。

以下三选一即可解决该 TypeError

yaml.safe_load(file.read())yaml.load(file.read(), Loader=yaml.FullLoader)yaml.load(file.read(), Loader=yaml.CLoader)

运行结果如下: