运维开发网

Python学习中yaml文件读取的详细介绍

运维开发网 https://www.qedev.com 2022-04-23 15:49 出处:网络
yaml其实也类似于json、txt,它们都属于一种文本格式。在我们的实际工作中,yaml文件经常作为服务期配置文件来使用。本文将为大家介绍一些Python读取yaml文件的方法,需要的可以参考一下

yaml其实也类似于json、txt,它们都属于一种文本格式。在我们的实际工作中,yaml文件经常作为服务期配置文件来使用。本文将为大家介绍一些Python读取yaml文件的方法,需要的可以参考一下


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


yaml 文件的应用场景

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

由于yaml文件通常被用作配置文件,因此很少被修改。因此,在这一章中,我们只学习阅读yaml文件。


yaml 文件的格式

= =首先你要知道yaml不是标记语言。与json类似,yaml也用于序列化数据。(内容格式为键值对,但不同于dict数据类型的键值对的显示风格)。内容格式人性化,易于阅读。==yaml文件格式后缀是。yaml。

注意:YAML有一个小怪癖。所有YAML文件的起始行应该是;。这是YAML格式的一部分,表示文件的开始。gt;

YAML语法格式如下:

1,区分大小写

2.缩进是用来表达层次关系的。

3.缩进空单元格的数量并不重要,只要同一级别的元素左侧对齐即可。通常情况下,开头缩进两个空单元格。

4.不支持制表符缩进,仅空用于缩进。

5.在字符后缩进一个空大小写,如冒号、逗号、短横线(-)等。

6、quot;ldquoYAML格式是文件的开头,用于分隔文件。

7、rdquo# rdquo注释(yaml文件只有行注释)

YAML支持三种数据结构。

对象:键值对的集合,也称为映射)/散列)/字典。

数组:按顺序排列的一组值,也叫序列)/列表。

标量:单一的、不可分割的值。

下面详细介绍三种数据结构:

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、引用 一个数据可以使用很多地方,使用变量# amp; 变量名 定义变量# *变量名 引用变量name: amp;a tomname1: *a# 7-1、能不能多个YAML 写在一起,有字典也有列表 ,加分隔符 ----10-20-30---name: sq# 8-1、yamL文件可以有YAMLDATA: conf.yaml


第三方包 - pyyaml

Pyyaml安装:pip install py YAML[如果安装失败,请参考如何安装软件包和模块一章中的第三方软件包]

pyyaml的导入:导入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()缺少1必需的位置参数:# 39;39号装载机;。如下图:


这是因为在YAML版本5.1之后,YAML版本5.1的负载(文件)被放弃使用,因为它不安全。5.1版本后,修改了需要指定加载器,默认加载器(FullLoader)禁止执行任意函数,加载函数变得更加安全。所以我们需要把result = yaml.load(data)改成result = yaml.load (data,loader = yaml.fullloader)。

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)

运行结果如下:


这篇关于阅读yaml文件学习Python的文章到此为止。关于阅读YAML文件的更多信息,请搜索源搜索网以前的文章或继续浏览下面的相关文章。希望大家以后能多支持源搜网!


0

精彩评论

暂无评论...
验证码 换一张
取 消