【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 Smithage: 30hobbies:- reading- hiking

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

二.使用 PyYAML 读取 YAML 数据

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

pip install pyyaml

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

import yamlfilename = '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 Smithage: 30hobbies:- 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_refname: John Smithage: 30employee:<<: *person_refposition: Engineer

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

4.2 多行文本

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

description: |This is a multi-linetext block in YAML.It preserves line breaksand indentation.

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

4.3 自定义类型

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

---
- !!python/object:__main__.Personname: John Smithage: 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何做用户体验优化

本文是从用户体验优化角度谈用户体验&#xff0c;其实用户体验不是设计必须的步骤&#xff0c;而是分散在产品设计中的产品设计思想。 一、用户体验分类 用户体验是指用户在“使用”某个产品或服务过程中的全部感受&#xff0c;包括情感、信仰、喜好、认知印象、生理和心理反应…

【设计原则】CQRS

文章目录 概述组成与特点优缺点何时使用 CQRS 模式推荐阅读 概述 CQRS&#xff08;Command Query Responsibility Segregation&#xff09;是一种软件设计模式&#xff0c;其核心设计理念是将一个对象的数据访问&#xff08;查询&#xff09;和数据操作&#xff08;命令&#…

node.js的错误处理

当我打开一个不存在的文件时&#xff0c;错误如下&#xff1a; 在读取文件里面写入console.log&#xff08;err&#xff09;&#xff0c;在控制台中可以看到我的错误代码类型&#xff1a;文件不存在的错误代码 ENOENT。见更多错误代码---打开node.js官方API文档Error 错误 | N…

LangChain-06 RAG With Source Doc 通过文档进行检索增强

安装依赖 pip install --upgrade --quiet langchain-core langchain-community langchain-openai编辑代码 from operator import itemgetter from langchain_core.messages import AIMessage, HumanMessage, get_buffer_string from langchain_core.prompts import format_d…

Java对象Object对象头-MarkWord分析-hashCode

代码主要通过打印对象的内存布局来观察对象头在不同状态下的变化&#xff0c;进而分析对象头在不同情况下的内存布局情况。 System.out.println(ClassLayout.parseInstance(o).toPrintable());&#xff1a;这一行代码通过使用开源库 openjdk.jol 的 ClassLayout 类来解析对象 o…

【Apache Doris】周FAQ集锦:第 1 期

【Apache Doris】周FAQ集锦&#xff1a;第 1 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

31. UE5 RPG使用增强输入激活GameplayAbility(一)

在前面文章中&#xff0c;我们实现了对技能添加并直接激活功能&#xff0c;介绍了GA的相关参数配置。现在&#xff0c;我们还不能通过键位触发技能&#xff0c;正常在游戏时&#xff0c;我们需要通过键位触发技能&#xff0c;实现技能的激活。 在UE5里面添加了增强输入&#xf…

AcWing 786. 第k个数——算法基础课题解

AcWing 786. 第k个数 题目描述 给定一个长度为 n的整数数列&#xff0c;以及一个整数 k&#xff0c;请用快速选择算法求出数列从小到大排序后的第 k 个数。 输入格式 第一行包含两个整数 n 和 k。 第二行包含 n 个整数&#xff08;所有整数均在 1∼10^9 范围内&#xff09…

Linux制作C++静态库和动态库并使用示例

创建动态库&#xff1a; 编写源文件&#xff1a; // sub.h 显式调用 #include <iostream>extern "C" int sub(int a, int b);// sub.cpp #include "sub.h"int sub(int a, int b) {return a - b; }// quadrature.h 隐式调用 #include <iostream&…

使用MySQL和PHP创建一个公告板

目录 一、创建表 二、制作首页&#xff08;创建主题以及显示列表&#xff09; 三、制作各个主题的页面&#xff08;输入回帖和显示列表&#xff09; 四、制作消息的查询界面 五、制作读取数据库信息的原始文件 六、制作数据重置页面 七、效果图 八、问题 1、目前无法处…

FME教程:以根据自然幢给宗地红线在相交处添加节点为例,介绍图斑在公共边相交处加节点的实现方法,宗地红线批量加节点,图斑自动加界址点

目录 一、实现效果 二、实现过程 1.读取数据 2.提取自然幢的坐标节点 3.根据自然幢节点&#xff0c;给宗地红线添加节点 4.重构宗地红线面 5.输出成果 6.模板的使用 三、总结 今天以根据自然幢给宗地红线在相交处添加节点为例&#xff0c;介绍图斑在公共边相交处加…

C#学生信息管理系统

一、引言 学生信息管理系统是现代学校管理的重要组成部分&#xff0c;它能够有效地管理学生的基本信息、课程信息、成绩信息等&#xff0c;提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。 二、项…

【C++练级之路】【Lv.18】哈希表(哈希映射,光速查找的魔法)

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、哈希1.1 哈希概念1.2 哈希函数1.3 哈希冲突 二、闭散列2.1 数据类型2.2 成员变量2.3 默认成员函数2.…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

余集和拉格朗日定理

L&#xff1a;一个群的例子&#xff08;在下面的文章中进一步详细介绍&#xff09;;R&#xff1a;约瑟夫路易拉格朗日&#xff08;1736-1813&#xff09;&#xff0c; 一、说明 数学家总是痴迷于根据乍一看似乎完全无关的事实/观察来形成概括。为什么&#xff1f;原因很简单&am…

基于 Quartz.NET 可视化任务调度平台 QuartzUI

一、简介 QuartzUI 是基于 Quartz.NET3.0 的定时任务 Web 可视化管理&#xff0c;Docker 打包开箱即用、内置 SQLite 持久化、语言无关、业务代码零污染、支持 RESTful 风格接口、傻瓜式配置、异常请求邮件通知等。 二、部署 QuartzUI 从 2022 年到现在没有提交记录&#xf…

第十二篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化操作Word

传奇开心果系列博文 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python自动化操作Word介绍二、使用python-docx示例代码二、**使用win32com示例代码**三、使用comtypes示例代码四、使用docx-mailmerge示例代码五、基本操作示例代码六、高级操作示例代码…

计算机网络——32差错检测和纠正

差错检测和纠正 错误检测 EDC 差错检测和纠错位&#xff08;冗余位&#xff09; D 数据由差错检测保护&#xff0c;可以包含头部字段 错误检测不是100%可靠的 协议会泄露一些错误&#xff0c;但是很少更长的EDC字段可以得到更好的检测和纠正效果 奇偶校验 单bit奇偶校验 …

精品PPT-2023年无人驾驶汽车车联网网络安全方案

以下是部分PPT内容&#xff0c;请您参阅。如需下载完整PPTX文件&#xff0c;请前往星球获取&#xff1a; 无人驾驶安全架构是一个复杂的系统&#xff0c;它涉及到多个关键组件和层次&#xff0c;以确保无人驾驶车辆在各种情况下都能安全、可靠地运行。以下是一些主要的无人驾驶…

基于springboot+vue的高效学生实习管理系统【管理员、学院、教师、企业单位、学生】

【管理员】 【院系负责人】 【教师】 【企业单位】 【学生】