Python学习之yaml文件的读取详解

 更新时间:2022年03月28日 11:46:21   作者:渴望力量的哈士奇  
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 格式的一部分, 表明一个文件的开始。>

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: 123456
info: 配置  # 中文---不建议使用,有可能会乱码

# 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: TOM
info:
   -10
   -20
   -30


# 5-1、引号 如果是有英文字母或者中文的,不加引号也是字符串
info: "HELLO word"  # 引号可以不加 

# 5-2、什么加引号:如果有特俗字符\n 不加引号就原字符样式输出    如果显示特殊字符效果:就加双引号
 
info: "HELLO\nwoord"


# 6-1、引用 一个数据可以使用很多地方,使用变量
# & 变量名   定义变量
# *变量名   引用变量
name: &a tom
name1: *a


# 7-1、能不能多个YAML 写在一起,有字典也有列表  ,加分隔符  ---
-10
-20
-30
---
name: sq

# 8-1、yamL文件可以有YAML
DATA: 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
  - Ultron
teammate:
  - Steven Rogers
  - Thor Odinson
  - Natasha Romanoff
  - Bruce Banner
  - Clint Barton
apprentice:
  彼得·帕克
wife:
  佩珀·波兹
father:
  霍华德·史塔克

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

# coding:utf-8

import yaml


def read(path):
    with open(path, 'r') as file:
        data = file.read()
        result = yaml.load(data)
        # result = yaml.load(data, Loader=yaml.FullLoader)
        return result


if __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)

运行结果如下:

到此这篇关于Python学习之yaml文件的读取详解的文章就介绍到这了,更多相关Python yaml读取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决python selenium3启动不了firefox的问题

    解决python selenium3启动不了firefox的问题

    今天小编就为大家分享一篇解决python selenium3启动不了firefox的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Anconda环境下Vscode安装Python的方法详解

    Anconda环境下Vscode安装Python的方法详解

    anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。这篇文章主要介绍了Anconda环境下Vscode安装Python的方法,需要的朋友可以参考下
    2020-03-03
  • Python编程技巧连接列表的八种操作方法

    Python编程技巧连接列表的八种操作方法

    这篇文章主要为大家介绍了Python编程技巧之连接列表的八种操作方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • python不相等的两个字符串的 if 条件判断为True详解

    python不相等的两个字符串的 if 条件判断为True详解

    这篇文章主要介绍了python不相等的两个字符串的 if 条件判断为True详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 解决Windows下PowerShell无法进入Python虚拟环境问题

    解决Windows下PowerShell无法进入Python虚拟环境问题

    这篇文章主要介绍了解决Windows下PowerShell无法进入Python虚拟环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • tensorflow输出权重值和偏差的方法

    tensorflow输出权重值和偏差的方法

    本篇文章主要介绍了tensorflow输出权重值和偏差的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python3实现二叉树的最大深度

    Python3实现二叉树的最大深度

    这篇文章主要介绍了Python3实现二叉树的最大深度, 文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Django用户认证系统 组与权限解析

    Django用户认证系统 组与权限解析

    这篇文章主要介绍了Django用户认证系统 组与权限解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • django 按时间范围查询数据库实例代码

    django 按时间范围查询数据库实例代码

    这篇文章主要介绍了django 按时间范围查询数据库实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Pandas 同元素多列去重的实例

    Pandas 同元素多列去重的实例

    今天小编就为大家分享一篇Pandas 同元素多列去重的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07

最新评论