【Python系列】Python 中 YAML 文件与字典合并的实用技巧

news2024/11/22 18:00:13

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

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

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

博客目录

    • Python 中 YAML 文件与字典合并的实用技巧
      • YAML 文件的读取与解析
      • 合并 YAML 配置和 Python 字典
      • 实用技巧
      • 结语

Python 中 YAML 文件与字典合并的实用技巧

在 Python 编程中,经常需要处理配置文件。YAML(YAML Ain’t Markup Language)是一种人类友好的数据序列化格式,广泛应用于配置文件和数据传输。同时,Python 作为一门功能丰富的编程语言,提供了强大的工具来操作 YAML 文件和字典。本文将探讨如何将 YAML 文件中的配置与 Python 字典进行合并,以及一些相关的实用技巧。
image-20240326213054120

YAML 文件的读取与解析

首先,我们需要了解如何读取和解析 YAML 文件。Python 提供了 yaml 库来处理 YAML 文件。使用 yaml.safe_load() 方法可以安全地加载 YAML 文件,并将其转换为 Python 字典。下面是一个简单的例子:

import yaml

filename = 'config.yaml'
with open(filename, "r", encoding="utf-8") as yaml_file:
    config = yaml.safe_load(yaml_file)

通过这个简单的代码片段,我们可以将 config.yaml 文件中的内容加载到 config 字典中。

合并 YAML 配置和 Python 字典

接下来,让我们来看看如何将 YAML 文件中的配置与 Python 字典进行合并。假设我们有一个基础配置 base_config,我们想要将 YAML 文件中存在但是 base_config 中不存在的字段添加到 base_config 中。下面是一个示例:

import yaml
import json

filename = 'config.yaml'
with open(filename, "r", encoding="utf-8") as yaml_file:
    config = yaml.safe_load(yaml_file)

base_config = {
    'id': '1',
    'name': 'test1220',
}

if base_config is not None:
    extra_configs = config['extra_config']
    if extra_configs is not None:
        filtered_config = next(
            (item_config for item_config in extra_configs if item_config['id'] == base_config['id']), None)
        if filtered_config is not None:
            for key, value in filtered_config.items():
                if key not in base_config:
                    base_config[key] = value

json_str = json.dumps(base_config)
print(json_str)

在这个例子中,我们首先加载了 YAML 文件中的配置到 config 字典中。然后,我们定义了一个基础配置 base_config,并尝试将 YAML 文件中与 base_config 的 ID 匹配的配置合并到 base_config 中。如果在 YAML 文件中找到了匹配的配置,并且在 base_config 中不存在的字段,则将这些字段添加到 base_config 中。最后,我们将合并后的 base_config 转换为 JSON 字符串并打印出来。

实用技巧

除了基本的合并操作之外,还有一些实用技巧可以帮助我们更好地处理 YAML 文件和 Python 字典:

  1. 异常处理: 在处理文件时,始终考虑到可能出现的异常情况。在读取文件或解析 YAML 时,使用 try-except 块可以有效地处理异常,以确保程序的稳定性。

  2. 默认值设置: 如果在 YAML 文件中找不到某个字段,可以考虑设置默认值。这样可以避免在合并时出现意外的情况,确保配置的完整性。

  3. 数据校验: 在合并配置之前,可以对数据进行校验以确保其有效性。例如,可以检查字段的类型是否与预期相符,或者检查字段的取值范围是否符合要求。

  4. 模块化设计: 如果合并逻辑过于复杂,可以考虑将其封装成一个独立的函数或类。这样可以提高代码的可读性和可维护性,同时也方便在其他地方重用该逻辑。

  5. 单元测试: 编写单元测试可以帮助我们验证合并逻辑的正确性。通过编写测试用例,可以确保合并操作在各种情况下都能正常工作,并且不会引入新的 bug。

通过合理地利用这些实用技巧,我们可以更加高效地处理 YAML 文件和 Python 字典,从而提升程序的质量和可靠性。

image-20240326213106326

结语

本文介绍了如何读取和解析 YAML 文件,以及如何将 YAML 文件中的配置与 Python 字典进行合并。我们还探讨了一些相关的实用技巧,希望能够对您在处理配置文件时有所帮助。在日常的 Python 开发工作中,灵活运用这些技巧可以让我们更加高效地完成任务,并写出优雅而健壮的代码。

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

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

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

img

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

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

相关文章

真假难辨:凯特王妃最新视频疑似AI合成,公众哗然!

会议之眼 快讯 北京时间3月23日凌晨,英国的凯特王妃发布了一段震撼人心的视频声明,坦诚自己正在面临一场艰难的挑战——患上了癌症。她坦言目前正在接受预防性化疗,并处于治疗的“早期阶段”,这一消息是在她暂时退出公众生活两个多…

智慧城市一屏统览,数字孪生综合治理

现代城市作为一个复杂系统,牵一发而动全身,城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维,从构成城市诸多要素、结构、功能等方面入手,系统推进…

力扣Lc21--- 389. 找不同(java版)-2024年3月26日

1.题目描述 2.知识点 &#xff08;1&#xff09;在这段代码中&#xff1a; // 统计字符串s中每个字符的出现次数for (int i 0; i < s.length(); i) {count[s.charAt(i) - a];}对于字符串s “abcd”&#xff1a; 当 i 0&#xff0c;s.charAt(i) ‘a’&#xff0c;ASCII…

Kali开启远程服务

一&#xff0c;先切换root账户 二、kali开启远程服务 1&#xff0c;修改远程登录的配置文件 vim /etc/ssh/sshd_config &#xff08;用文本编辑器打开此文件) 在文件的普通模式下&#xff0c;使用/PermitRootLogin&#xff0c;回车&#xff0c;查找到该行&#xff0c;i&#…

鸿蒙OS开发实例:【demo选择列表限定数量】

效果图&#xff1a; 示例代码 // 使用 DevEco Studio 3.1.1 Release 及以上版本&#xff0c;API 版本为 api 9 及以上。 // 主要功能及注意事项&#xff1a; // 该组件展示了一个乘客选择列表。列表中的每个项目包含一个复选框和对应的乘客姓名&#xff0c; // 用户点击任意一…

Redis如何应对缓存穿透问题——Java全栈知识(9)

我们在正常使用缓存的时候的流程大概就是这样的&#xff1a; 请求访问缓存&#xff0c;缓存有数据就返回&#xff0c;缓存无数据就去数据库里面查数据写入到缓存中。 1、缓存穿透问题 但是如果由恶意请求&#xff0c;短时间内大量的访问不存在的数据&#xff0c;这时每个请求…

工作中遇到的疑难杂症,以及解决办法

一 pagehelper和自定义mybatis拦截器冲突bug 1.1 问题描述 当在springboot工程&#xff0c;持久层使用mybatis&#xff0c;且使用pagehelper实现分页功能&#xff0c;当随着业务发展&#xff0c;需要自定义一个mybatis的拦截器实现sql的打印&#xff0c;但是出现拦截器失效&…

flac和mp3可以互相转换吗?flac和mp3互相转换的方法

一&#xff0c;什么是FLAC格式 FLAC即是Free Lossless Audio Codec的缩写&#xff0c;中文可解为无损音频压缩编码。FLAC是一套著名的自由音频压缩编码&#xff0c;其特点是无损压缩。不同于其他有损压缩编码如MP3 及 AAC&#xff0c;它不会破坏任何原有的音频资讯&#xff0c…

【保姆级教程】YOLOv8自动数据标注

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple1.3 安装labelme标注工具 pip install labelme二、半自动标注…

MATLAB 自定义生成直线点云(详细介绍) (47)

MATLAB 自定义生成直线点云 (详细介绍)(47) 一、算法介绍二、具体步骤二、算法实现1.代码2.效果一、算法介绍 通过这里的直线生成方法,可以生成模拟直线的点云数据,并通过调整起点、终点、数量和噪声水平等参数来探索不同类型的直线数据。这种方法可以用于测试、验证和开…

【考研数学】跟武忠祥,如何使用好《复习全书》和《高数辅导讲义》?

本人就是全程跟武忠祥老师高分上岸的&#xff01; 高数辅导讲义建议在强化阶段再买就行 在基础阶段把基础篇吃透就ok 本人属于基础很差相当于是零基础的考研党&#xff0c;经过一年备考成功上岸 中间花费了很多时间在考研数学备考信息检索上&#xff0c;写下这篇希望能帮助…

H264码流结构介绍

H264的码流格式 一般有两种格式&#xff1a; 1、Annex B&#xff08;字节流格式&#xff09;&#xff1a;由Network Abstraction Layer Units (NALU)组成&#xff0c;也被称为NAL。每个NALU包都可以被单独解析和处理。 2、MP4格式&#xff0c;也叫RTP包格式。MP4 格式没有起始…

Java Web-Maven

Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具 Maven的作用 1.依赖管理:方便快捷的管理项目依赖资源(jar包)&#xff0c;避免版本冲突问题 我们有的项目需要大量的jar包&#xff0c;采用手动导包的方式非常繁琐&#xff0c;并且版本升级也…

睿眼(Realeye)视觉识别模型训练全流程心得分享

睿眼&#xff08;Realeye&#xff09;是一款集智能采集、识别、定位、抓取、视控全流程为一体的 AI 产品&#xff0c; 以其 AI 算法结合机械臂硬件实现对万事万物的定位抓取功能&#xff0c;能够实现对任意目标物从图 片采集、标注到模型训练和抓取。通过人性化的交互方式、易操…

深度剖析python的就业面

技术行业&#xff0c;一定要提升技术功底&#xff0c;丰富项目实战经验&#xff1b; 这对于你未来几年职业规划&#xff0c;以及测试技术掌握的深度非常有帮助。 WEB开发 尽管目前Python并不是做Web开发的首选&#xff0c;但这仍是一个比较热门的方向。 现如今有不少知名网…

【STL学习】(2)string的模拟实现

前言 本文将模拟实现string的一些常见功能&#xff0c;目的在于加深理解string与回顾类与对象的相关知识。 一、前置知识 string是表示可变长的字符序列的类string的底层是使用动态顺序表存储的string对象不以’\0’字符为终止算长度&#xff0c;而是以size有效字符的个数算长…

嵌入式开发过程中应该养成的习惯!

最近有一些读者来咨询:有什么需要注意的编程好习惯?给大家分享一下。 第一:多看官方文档 不要被这几个字吓到,官方文档其实都是宝藏。 一个成熟的技术诞生,可以没有博客没有书籍,但一定会有一个官方文档,毋庸置疑,它一定是最准确、最实时的资料。编写官方文档的人,…

【SAP2000】碰撞分析 Impact Analysis

碰撞分析 Impact Analysis CSI程序的动力分析功能非常广泛。一个例子是分析两个质量或结构之间碰撞效应的能力。 The possibilities of dynamic analysis with CSI programs are very extensive. An example of this is the ability to analyze the effects of collision bet…

Leetcode算法题笔记(2)

目录 图论51. 岛屿数量解法一 52. 腐烂的橘子解法一 53. 课程表解法一 54. 实现 Trie (前缀树)解法一 回溯55. 全排列解法一 56. 子集解法一解法二 57. 电话号码的字母组合解法一 58. 组合总和解法一解法二 59. 括号生成解法一解法二 60. 单词搜索解法一 61. 分割回文串解法一 …

一文看懂什么是OpenHarmony流转架构

随着全场景多设备的生活方式不断深入&#xff0c;用户拥有的设备越来越多&#xff0c;不同设备都能在适合的场景下提供良好的体验&#xff0c;例如手表可以提供及时的信息查看能力&#xff0c;电视可以带来沉浸的观影体验。但是&#xff0c;每个设备也有使用场景的局限&#xf…