【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 yamlfilename = '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 jsonfilename = '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] = valuejson_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.rhkb.cn/news/287164.html

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

相关文章

Focal Modulation Networks聚焦调制网络

摘要 我们提出了 焦点调制网络 (简称 FocalNets) ,其中 自注意( SA )被 Focal Modulation 替换,这种机制 包括三个组件:( 1 )通过 depth-wise Conv 提取分级的上下文信息&#xff0…

数据丢失大拯救:格式化后如何高效恢复文件

一、遭遇格式化危机,数据恢复有妙招 在数字化时代,数据丢失无疑是让人头疼的问题之一。特别是当存储设备意外格式化后,许多用户都会感到手足无措,不知如何是好。那么,格式化了怎么恢复呢?其实,…

黑马头条day5总结

1、surefire-reports for the individual test results. 借鉴:【已解决】surefire-reports for the individual test results.-CSDN博客 Please refer to D:\javashizhan01\heima-leadnews\heima-leadnews-service\heima-leadnews-article\target\surefire-report…

【@changesets/cli】变更集实战教程

一、背景概述 前端目前基于Monorepo架构的npm包开发很普遍,在开发完毕后,我们需要对包进行版本号升级,并且部署,这些操作如果是手动来操作的话,很麻烦,而且容易出错。 例如有这样的场景: -ap…

【Java程序设计】【C00345】基于Springboot的船舶监造管理系统(有论文)

基于Springboot的船舶监造管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以及i…

敏捷开发最佳实践:学习与改进维度实践案例之会诊式培养敏捷教练

自组织团队能够定期反思并采取针对性行动来提升人效,但2022年的敏捷调研发现,70%的中国企业在学习和改进方面仍停留在团队级。本节实践案例将分享“会诊式培养敏捷教练”的具体做法,突出了敏捷以人为本的学习和改进,强调了通过人员…

Java前缀和

一维前缀和&#xff1a; public class Main {private static final int N 100010;public static void main(String[] args) {int[] s new int[N];int[] a new int[N];int n 10;// 定义10个数for (int i 1; i < n; i) {a[i] (int) (Math.random() * 10);}for (int i 1…

大模型时代的向量数据库:原理解析和应用案例

大家好&#xff0c;在人工智能领域&#xff0c;数据处理和加工的需求愈发增加。随着人们深入探索AI高级的应用&#xff0c;如图像识别、语音搜索和推荐引擎等&#xff0c;数据的复杂性也在不断地增加。此时传统的数据库存储方式已不能完全满足需求&#xff0c;向量数据库应运而…

Java零基础入门到精通_Day 2

18 算数运算符 - * / % 整数的运算只能得到整数 除非用浮点数进行运算&#xff08;得到浮点数&#xff09; public class Base_002 {public static void main(String[] args) {double a 6.0;int b 4;System.out.println(a/b); //1.5} } 19 字符的操作 public class Base_0…

大模型面试准备(五):图解 Transformer 最关键模块 MHA

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何备战、面试常考点分享等热门话题进行了深入的讨论。 合集在这…

【Godot4自学手册】第二十九节使用Shader来实现敌人受伤的闪白效果

在Godot 4中&#xff0c;Shader是用来为材质提供自定义渲染效果的程序。材质可以应用于MeshInstance、CanvasItem和ParticleEmitter等节点。Shader可以影响顶点的变换、片段&#xff08;像素&#xff09;的颜色&#xff0c;以及光照与物体的交互。 在Godot中&#xff0c;Shader…

C#_事件_多线程(基础)

文章目录 事件通过事件使用委托 多线程(基础)进程:线程: 多线程线程生命周期主线程Thread 类中的属性和方法创建线程管理线程销毁线程 昨天习题答案 事件 事件&#xff08;Event&#xff09;本质上来讲是一种特殊的多播委托&#xff0c;只能从声明它的类中进行调用,基本上说是…

【小沐学AI】智谱AI大模型的一点点学习(Python)

文章目录 1、简介1.1 大模型排行榜 2、智谱AI2.1 GLM2.1.1 模型简介2.1.2 开源代码2.1.2.1 GLM-130B 2.2 ChatGLM2.2.1 模型简介2.2.2 开源代码2.2.2.1 ChatGLM2.2.2.2 ChatGLM22.2.2.3 ChatGLM3 2.3 CodeGeeX2.3.1 模型简介2.3.2 开源代码 2.4 CogView2.4.1 模型简介2.4.2 开源…

在存在代理的主机上,为docker容器配置代理

1、配置Firefox的代理 (只配置域名或者ip&#xff0c;前面不加http://) 2、为容器中的Git配置代理 git config --global http.proxy http://qingteng:8080 3、Git下载时忽略证书校验 env GIT_SSL_NO_VERIFYtrue git clone https://github.com/nginx/nginx.git 4、docker的…

《剑指 Offer》专项突破版 - 面试题 93 : 最长斐波那契数列(C++ 实现)

题目链接&#xff1a;最长斐波那契数列 题目&#xff1a; 输入一个没有重复数字的单调递增的数组&#xff0c;数组中至少有 3 个数字&#xff0c;请问数组中最长的斐波那契数列的长度是多少&#xff1f;例如&#xff0c;如果输入的数组是 [1, 2, 3, 4, 5, 6, 7, 8]&#xff0…

Redission 分布式锁原理分析

一、前言 我们先来说说分布式锁&#xff0c;为啥要有分布式锁呢? 像 JDK 提供的 synchronized、Lock 等实现锁不香吗&#xff1f;这是因为在单进程情况下&#xff0c;多个线程访问同一资源&#xff0c;可以使用 synchronized 和 Lock 实现&#xff1b;在多进程情况下&#xff…

MATLAB 公共区域的点云合并(46)

MATLAB 公共区域的点云合并(46) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 点云配准后,或者公共区域存在多片点云对场景进行冗余过量表达时,我们需要将点云进行合并,Matlab点云工具中提供了这样的合并函数,通过指定网格步长,对初始点云进行过滤。 函数主要实…

ReactNative项目构建分析与思考之RN组件化

传统RN项目对比 ReactNative项目构建分析与思考之react-native-gradle-plugin ReactNative项目构建分析与思考之native_modules.gradle ReactNative项目构建分析与思考之 cli-config 在之前的文章中&#xff0c;已经对RN的默认项目有了一个详细的分析&#xff0c;下面我们来…

Linux之文件系统与软硬链接

前言 我们之前阐述的内容都是在文件打开的前提下, 但是事实上不是所有文件都是被打开的, 且大部分文件都不是被打开的(也就是文件当前并不需要被访问), 都在磁盘中进行保存. 那这些没有被(进程)打开的文件, 也是需要被管理的! 对于这部分文件核心工作之一是能够快速定位文件…

P1135 奇怪的电梯 (双向bfs)

输入输出样例 输入 5 1 5 3 3 1 2 5输出 3说明/提示 对于 100%100% 的数据&#xff0c;1≤N≤200&#xff0c;1≤A,B≤N&#xff0c;0≤Ki​≤N。 本题共 1616 个测试点&#xff0c;前 1515 个每个测试点 66 分&#xff0c;最后一个测试点 10 分。 重写AC代码&#xff1…