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

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

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

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

相关文章

MySQL数据库------------探索高级SQL查询语句

目录 一、常用查询 1.1按关键字排序 1.2简单的select条件查询(where) 二、排序 2.1升序排列 2.2降序排序 三、order by 查询结果排序 ①order by还可以结合where进行条件过滤,筛选地址是哪里的学生按分数降序排列 ②查询学生信息先按hobbyid降序排列&#…

面试官问我 ,try catch 应该在 for 循环里面还是外面?

首先 , 话说在前头, 没有什么 在里面 好 和在外面好 或者 不好的 一说。 本篇文章内容: 使用场景 性能分析 个人看法 1. 使用场景 为什么要把 使用场景 摆在第一个 ? 因为本身try catch 放在 for循环 外面 和里面 &#…

(一)whatsapp 语音通话基本流程

经过了一整年的开发测试&#xff0c;终于将whatsapp 语音通话完成&#xff0c;期间主要参考webrtc的源码来实现.下面简要说一下大致的步骤 XMPP 协商 发起或者接受语音通话第一步是发起XMPP 协商&#xff0c;这个协商过程非常重要。下面是协商一个包 <call toxxxs.whatsap…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 4 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…

背包DP模板

01背包 01背包-1 #include <bits/stdc.h> using namespace std;const int N 1e5 10; int n, m, f[N][N], v[N], w[N];int main() {cin >> n >> m;for (int i 1; i < n; i) {cin >> v[i] >> w[i];}for (int i 1; i < n; i) {for (int…

构建多语言数字资产交易平台和秒合约系统:从概念到实现

多语言交易所开发定制秒合约平台币数字所网站制作一条龙搭建 第一步&#xff1a;需求分析 在开始搭建多语言交易所和秒合约平台之前&#xff0c;需要进行详细的需求分析&#xff0c;包括以下几个方面&#xff1a; 功能需求&#xff1a;确定交易所需要提供的功能&#xff0c;包…

要创建企业百度百科,需要注意以下技巧和原则。

&#xfffd;&#xfffd;&#xfffd;词条内容技巧 词条排版必须美观&#xff0c;内容分段&#xff0c;然后制作副标题。例如&#xff0c;一个企业的名称分为小标题&#xff0c;如企业介绍、企业文化、企业发展、企业历史和企业新闻。这不仅可以给读者一个良好的阅读&#xf…

Learn OpenGL 30 SSAO

SSAO 我们已经在前面的基础教程中简单介绍到了这部分内容&#xff1a;环境光照(Ambient Lighting)。环境光照是我们加入场景总体光照中的一个固定光照常量&#xff0c;它被用来模拟光的散射(Scattering)。在现实中&#xff0c;光线会以任意方向散射&#xff0c;它的强度是会一…

python 第一次作业

因为笔者有一些 c/c 语言的基础&#xff0c;所以应该学 python 会稍微简单一些 格式化输出的时候&#xff0c;保留2位小数的格式是 # 假设输出 a &#xff0c;并且 a 保留 2 位小数 print(%.2f%a)输入 输入的时候所有的输入都是字符串类型&#xff0c;我们需要进行类型转换 …

RHCE- 4-Web服务器(2)

基于https协议的静态网站 概念解释 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。 HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中…

应用层协议 - HTTP

文章目录 目录 文章目录 前言 1 . 应用层概要 2. WWW 2.1 互联网的蓬勃发展 2.2 WWW基本概念 2.3 URI 3 . HTTP 3.1 工作过程 3.2 HTTP协议格式 3.3 HTTP请求 3.3.1 URL基本格式 3.3.2 认识方法 get方法 post方法 其他方法 3.3.2 认识请求报头 3.3.3 认识请…

day8 ARM

main.c #include"key_inc.h"//封装延时函数void delay(int ms){int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}}}int main(){//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1000);}re…

基于鹦鹉优化器(PO)的无人机路径规划

该优化算法是2024年新发表的一篇SCI二区论文&#xff0c;具有良好的实际应用和改进意义。一键运行main函数代码自动保存高质量图片 1、鹦鹉优化器 摘要&#xff1a;随机优化方法作为一种有效的技术在当代研究中得到了显著的突出&#xff0c;有效地解决了复杂的优化挑战。本文…

java的一些内部小知识,类与对象的关系

目录 1. java2. 类与对象的关系 1. java test.java ---- javac --> Test.class ---- java-----> 内存 ----> cpu 源文件 二进制代码 所有正在运行的软件都在内存中有自己的内存空间 jvm —>运行java程序的&#xff0c;java虚拟机 main(); // 内部调用run()run(i…

Fiddler抓包工具之Fiddler界面主菜单功能介绍

Fiddler界面主菜单功能介绍 File菜单 File菜单中的命令主要支持完成通过Fiddler来启动和停止web流量的捕获&#xff08;capture&#xff09;,也可以加载或存储捕获的流量 &#xff08;1&#xff09;Capture Traffic&#xff1a;默认勾选&#xff0c;勾选此项才可抓包&#xff…

什么洗地机值得推荐?高口碑品牌深度测评严选

在所有清洁电器中&#xff0c;洗地机的清洁力是大家公认的&#xff0c;像性能好的机子&#xff0c;家里的日常清洁基本都是一遍过&#xff0c;像有娃的&#xff0c;有狗子的家庭&#xff0c;再炸裂的场景&#xff0c;三两下就能还原如初&#xff01;如果你现在正在为了如何挑选…

《自动机理论、语言和计算导论》阅读笔记:p5-p27

《自动机理论、语言和计算导论》学习第2天&#xff0c;p5-p27总结&#xff0c;总计23页。 一、技术总结 1.集合 (1)commutative law of union. (2)distribute law of union. 2.归纳法(induction) & 演绎法(deduction) (1)归纳法&#xff1a;从许多个别的事实或原理中…

C++基础之继承续(十六)

一.基类与派生类之间的转换 可以把派生类赋值给基类可以把基类引用绑定派生类对象可以把基类指针指向派生类对象 #include <iostream>using std::cin; using std::cout; using std::endl;//基类与派生类相互转化 class Base { private:int _x; public:Base(int x0):_x(…

(执行上下文作用域链)前端八股文修炼Day4

一 作用域作用域链 作用域&#xff08;Scope&#xff09;是指程序中定义变量的区域&#xff0c;作用域规定了在这个区域内变量的可访问性。在 JavaScript 中&#xff0c;作用域可以分为全局作用域和局部作用域。 全局作用域&#xff1a;在代码中任何地方都可以访问的作用域&am…

systemd-journal(一)之journalctl命令详解

文章目录 写在前面概述描述不传递参数传递一个或多个匹配参数示例 源选项用法--system, --user-M, --machine-m, --merge-D DIR, --directoryDIR--fileGLOB--rootROOT--imageIMAGE--image-policypolicy--namespaceNAMESPACE 过滤选项用法-S, --since, -U, --until举例&#xff…