【Python系列】Python中的YAML数据读取与解析

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 引言
    • 一.YAML 简介
    • 二.使用 PyYAML 读取 YAML 数据
    • 三.访问 YAML 数据
    • 四.YAML 的高级特性
      • 4.1 引用
      • 4.2 多行文本
      • 4.3 自定义类型
    • 五.YAML 最佳实践
      • 5.1 使用缩进和冒号
      • 5.2 嵌套和层级
      • 5.3 引用和共享数据
      • 5.4 注释
      • 5.5 错误处理
    • 六.结论

引言

在现代软件开发中,配置文件和数据序列化是非常常见的需求。YAML 是一种人类可读的数据序列化格式,它使用简洁的语法和结构来表示数据。在 Python 中,我们可以使用第三方库 PyYAML 来读取和解析 YAML 数据。本文将介绍如何使用 Python 读取和解析 YAML 数据,并探讨 YAML 的一些高级特性和最佳实践。

image-20240403235751524

一.YAML 简介

YAML 是一种轻量级的数据序列化格式,它的全称是"YAML Ain’t Markup Language",强调了它不是一种标记语言。YAML 的设计目标是易读易写,并且与多种编程语言兼容。YAML 使用缩进和符号来表示数据结构,例如列表、字典和标量值。

下面是一个简单的 YAML 示例:

person:
  name: John Smith
  age: 30
  hobbies:
    - reading
    - hiking

在这个示例中,我们定义了一个名为"person"的字典,它包含了名字、年龄和爱好。通过缩进和冒号来表示层级关系,通过连字符和空格来表示列表。

二.使用 PyYAML 读取 YAML 数据

在 Python 中,我们可以使用 PyYAML 库来读取和解析 YAML 数据。首先,我们需要安装 PyYAML 库,可以使用 pip 命令进行安装:

pip install pyyaml

安装完成后,我们可以使用以下代码读取 YAML 文件并解析其中的数据:

import yaml

filename = 'data.yaml'

try:
    with open(filename, 'r', encoding="utf-8") as file:
        yaml_data = yaml.safe_load(file)
        print(yaml_data)
except FileNotFoundError:
    print(f"File '{filename}' not found.")
except yaml.YAMLError as e:
    print(f"Error while loading YAML: {e}")
except Exception as e:
    print(f"An error occurred: {e}")

在上述代码中,我们使用open函数打开 YAML 文件,并通过yaml.safe_load函数加载 YAML 数据。safe_load函数将 YAML 数据解析为 Python 对象,通常是字典或列表。我们可以直接打印 Python 对象来查看解析结果。

需要注意的是,我们使用了异常处理来捕获可能发生的错误,例如文件不存在的FileNotFoundError和 YAML 加载错误的yaml.YAMLError。这样可以帮助我们更好地进行故障排查和错误处理。

三.访问 YAML 数据

一旦我们将 YAML 数据解析为 Python 对象,我们就可以像操作普通字典或列表一样访问其中的数据。例如,假设我们有以下 YAML 数据:

person:
  name: John Smith
  age: 30
  hobbies:
    - reading
    - hiking

使用 PyYAML 解析后,我们可以通过以下方式访问数据:

print(yaml_data['person']['name'])  # 输出:John Smith
print(yaml_data['person']['age'])  # 输出:30
print(yaml_data['person']['hobbies'])  # 输出:['reading', 'hiking']

通过索引和键名的方式,我们可以深入访问 YAML 数据的不同层级和字段。

四.YAML 的高级特性

除了基本的数据结构,YAML 还支持一些高级特性,例如引用、多行文本和自定义类型。这些特性使得 YAML 在表示复杂数据结构和配置文件时非常灵活和强大。

4.1 引用

YAML 允许使用&符号创建引用,以及使用*符号引用已经定义的值。这在避免重复定义和共享数据时非常有用。下面是一个示例:

person: &person_ref
  name: John Smith
  age: 30

employee:
  <<: *person_ref
  position: Engineer

在这个示例中,我们首先定义了一个名为person的字典,并使用&person_ref将其命名为引用。然后,在employee字典中使用<<: *person_ref引用了person字典的内容。这样,employee字典将继承person字典的所有键值对。

4.2 多行文本

YAML 允许使用|符号表示多行文本,以保持文本的格式和结构。这在表示长文本、配置说明和代码块时非常有用。以下是一个示例:

description: |
  This is a multi-line
  text block in YAML.
  It preserves line breaks
  and indentation.

在这个示例中,我们使用|符号将多行文本定义为description字段的值。通过保持原始的换行符和缩进,我们可以在 YAML 中轻松地表示多行文本。

4.3 自定义类型

YAML 允许使用自定义类型和标签来表示特定的数据结构和含义。通过定义自定义类型,我们可以更好地描述和解析特定的数据。以下是一个示例:

---
- !!python/object:__main__.Person
  name: John Smith
  age: 30

在这个示例中,我们使用!!python/object:__main__.Person标签来表示一个自定义类型Person。这样,我们可以在加载 YAML 数据时将其解析为 Python 中的自定义对象。

image-20240403235811553

五.YAML 最佳实践

在使用 YAML 时,以下是一些最佳实践和注意事项:

5.1 使用缩进和冒号

YAML 使用缩进和冒号来表示层级关系和键值对。在编写 YAML 时,确保正确使用缩进和冒号,以保持数据的层次结构和结构清晰。

5.2 嵌套和层级

YAML 支持嵌套的数据结构,例如字典中嵌套字典、列表中嵌套列表等。在编写嵌套数据时,注意保持正确的层级关系,以避免解析错误。

5.3 引用和共享数据

使用引用和&*符号可以避免重复定义和共享数据。这样可以使 YAML 文件更简洁、易读和易维护。

5.4 注释

YAML 支持使用#符号添加注释。在编写 YAML 时,可以使用注释来提供额外的说明、解释和文档。

5.5 错误处理

在读取和解析 YAML 数据时,始终进行错误处理。捕获可能发生的异常,例如文件不存在、格式错误等,并提供相应的错误提示和处理。

六.结论

本文介绍了如何使用 Python 读取和解析 YAML 数据。我们首先简要介绍了 YAML 的基本概念和语法规则,然后演示了如何使用 Python 中的 PyYAML 库读取 YAML 文件,并将其解析为 Python 对象。文章还讨论了 YAML 的一些高级特性和最佳实践,以帮助读者更好地理解和应用 YAML 数据。

通过使用 YAML,我们可以轻松地表示和传输各种数据,例如配置文件、数据结构和文本内容。借助 Python 和 PyYAML 库的强大功能,我们可以

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/514218.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物联网实战--入门篇之(十二)完结

目录 一、涉及的知识点 二、物联网现状 三、物联网前景 四、文章方向 这篇文章主要对这个项目做个总结&#xff0c;以及对于物联网今后的学习方向。 一、涉及的知识点 不得不说&#xff0c;物联涉及确实很广&#xff0c;就净化器这个小项目来说&#xff0c; 编程语言&…

【Jenkins】关于账号,证书验证的设置问题

当你的电脑启动了Jenkins&#xff0c;这时候一定要小心更改管理员账号和密码~~~ 当你的电脑启动了Jenkins&#xff0c;这时候一定要小心更改管理员账号和密码~~~ 当你的电脑启动了Jenkins&#xff0c;这时候一定要小心更改管理员账号和密码~~~ 重要的事情说3遍&#xff0c;如…

【Java核心能力】饿了么一面:Redis 面试连环炮

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

ES6学习(四)-- Reflect / Promise / Generator 函数 / Class

文章目录 1. Reflect1.1 代替Object 的某些方法1.2 修改某些Object 方法返回结果1.3 命令式变为函数行为1.4 ! 配合Proxy 2. ! Promise2.1 回调地狱2.2 Promise 使用2.3 Promise 对象的状态2.4 解决回调地狱的方法2.5 Promise.all2.6 Promise.race 3. Generator 函数3.1 基本语…

MySQL执行流程

MySQL执行流程 在使用MySQL时&#xff0c;你是否有疑惑&#xff0c;当我们提交一条SQL给MySQL时它到底是如何执行的&#xff1f; 通过了解MySQL的执行流程一定能解开你的疑惑&#x1f914; 总体流程 客户端通过连接器连接MySQL查询执行缓存解析器解析SQL执行器执行SQL调用存…

非小米电脑下载小米电脑管家

由于 小米电脑管家 现在新增了机型验证&#xff0c;本篇将分享非小米电脑用户如何绕过机型验证安装 小米电脑管家 首先到小米跨端智联官网 https://hyperos.mi.com/continuity 中下载小米电脑管家 打开官网链接后&#xff0c;直接滑动到底部&#xff0c;点击下载 下载完成后…

鸿蒙OS开发实例:【组件化模式】

组件化一直是移动端比较流行的开发方式&#xff0c;有着编译运行快&#xff0c;业务逻辑分明&#xff0c;任务划分清晰等优点&#xff0c;针对Android端的组件化&#xff1b;与Android端的组件化相比&#xff0c;HarmonyOS的组件化可以说实现起来就颇费一番周折&#xff0c;因为…

数据转换 | Matlab基于GASF格拉姆角和场一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 基于GASF&#xff08;Gramian Angular Summation Field&#xff09;的方法&#xff0c;将一维数据转换为二维图像的步骤描述 标准化数据&#xff1a; 首先&#xff0c;对一维时序数据进行标准化处理&#xf…

canal部署

定义 canal组件是一个基于mysql数据库增量日志解析&#xff0c;提供增量数据订阅和消费&#xff0c;支持将增量数据投递到下游消费者&#xff08;kafka&#xff0c;rocketmq等&#xff09;或者存储&#xff08;elasticearch,hbase等&#xff09;canal感知到mysql数据变动&…

.Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置

.Net Core/.Net6/.Net8 &#xff0c;启动配置/Program.cs 配置 没有废话&#xff0c;直接上代码调用 没有废话&#xff0c;直接上代码 /// <summary>/// 启动类/// </summary>public static class Mains{static IServiceCollection _services;static IMvcBuilder _…

2012年认证杯SPSSPRO杯数学建模D题(第一阶段)人机游戏中的数学模型全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 减缓热岛效应 D题 人机游戏中的数学模型 原题再现&#xff1a; 计算机游戏在社会和生活中享有特殊地位。游戏设计者主要考虑易学性、趣味性和界面友好性。趣味性是本质吸引力&#xff0c;使玩游戏者百玩不厌。网络游戏一般考虑如何搭建安全可…

【leetcode】将x减到0的最小操作数/水果成篮/找到字符串中所有字母异位词{史上最容易懂的解析}

文章目录 1.将x减到0的最小操作数2.水果成篮3.找到字符串中所有字母异位词 1.将x减到0的最小操作数 分析题目 x不断地减去数组两端的值 看能否减到0&#xff1b;是不是就是在问&#xff1a;nums数组中存不存在【左端右端】组成的连续区间&#xff0c;区间上数的和为x 继续分析 …

EXCEL地理数据处理工具(地图任务)

版本号 作者 修订内容 发布日期 1.0 小O 更新至0705版 2022-4-28 1.1 小O 更新至0772版 2024年4月3日 一、概述 小O地图EXCEL插件版提供基于EXCEL表格进行地理数据处理、地图可视化、地图绘图等功能&#xff0c;地理工具是用户使用频率很高的功能模块。地理工具能…

hadoop:案例:将顾客在京东、淘宝、多点三家平台的消费金额汇总,然后先按京东消费额排序,再按淘宝消费额排序

一、原始消费数据buy.txt zhangsan 5676 2765 887 lisi 6754 3234 1232 wangwu 3214 6654 388 lisi 1123 4534 2121 zhangsan 982 3421 5566 zhangsan 1219 36 45二、实现思路&#xff1a;先通过一个MapReduce将顾客的消费金额进行汇总&#xff0c;再通过一个MapReduce来根据金…

easyExcel 模版导出 中间数据纵向延伸,并且对指定列进行合并

想要达到的效果 引入maven引用 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version></dependency> 按照要求创建模版 备注 : 模板注意 用{} 来表示你要用的变量 如果本…

【Spring】使用@Bean和@Import注解配置Bean,与Bean的实例化

目录 1、bean是什么 2、配置bean 2.1、使用Bean注解配置Bean 2.2、使用Import注解配置Bean 3、实例化Bean 1、bean是什么 在 Spring 中&#xff0c;Bean 是指由 Spring 容器管理的对象。Spring IOC 容器负责创建、配置和管理这些 Bean 对象的生命周期。Spring IOC 容器会管…

网络基础二——传输层协议UDP与TCP

九、传输层协议 ​ 传输层协议有UDP协议、TCP协议等&#xff1b; ​ 两个远端机器通过使用"源IP"&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”&#xff0c;"协议号"来标识一次通信&#xff1b; 9.1端口号的划分 ​ 0-10…

Spring Boot中前端通过请求接口下载后端存放的Excel模板

导出工具类 package com.yutu.garden.utils;import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import org.apache.commons.io.IOUtils; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger;…

06-编辑器

gedit编辑器 gedit是Ubuntu系统自带的编辑器&#xff0c;可以用来轻度编辑和记录一些内容。 在终端中我们通过以下命令打开&#xff1a; gedit 要打开或者新建的文件名虽然Ubuntu的图形界面也能通过gedit打开文件&#xff0c;但是用终端打开gedit可以动用更高的权限&#xff…

OpenHarmony实战开发-使用一次开发多端部署实现一多设置典型页面

介绍 本示例展示了设置应用的典型页面&#xff0c;其在小窗口和大窗口有不同的显示效果&#xff0c;体现一次开发、多端部署的能力。 1.本示例使用一次开发多端部署中介绍的自适应布局能力和响应式布局能力进行多设备&#xff08;或多窗口尺寸&#xff09;适配&#xff0c;保…