Python - 自动化办公,将yml根据转换规则转换成‘‘ = ‘‘

文章目录

  • 前言
    • ## Python - 自动化办公,将yml根据转换规则转换成'' = ''
      • 1. 准备工作
      • 2. demo
      • 3. 测试

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


## Python - 自动化办公,将yml根据转换规则转换成’’ = ‘’

ruamel.yaml 是一个用于处理 YAML 文件的 Python 库。它是 PyYAML 的增强版,提供了更多的功能,特别是在处理 YAML 格式的复杂性和保留文件中的注释和格式方面。

1. 准备工作

yml文件:
在这里插入图片描述

server:port: 13145  # 默认端口tomcat:uri-encoding: UTF-8 # 默认编码
eureka:instance:prefer-ip-address: true # 优先ip注册client:service-url:defaultZone: http://127.0.0.1:8761/eureka # 注册中心地址down:url: http://127.0.0.1:19001/actuator/service-registry?status=DOWN
spring:application:name: testDemo # 项目名称servlet:multipart:    #上传配置enabled: truemax-file-size: 10MBmax-request-size: 20MBsession:           #session 超时设置timeout: 1800kafka:bootstrap-servers: 127.0.0.1:9092 #你kafka服务器地址listener:missing-topics-fatal: false # 消费端监听的topic不存在时,项目启动会报错(关掉)ack-mode: manual_immediate # 配置监听手动提交 ack ,消费一条数据完后,立即提交#生产者的配置,大部分我们可以使用默认的,这里列出几个比较重要的属性producer:#每批次发送消息的数量batch-size: 16#设置大于0的值将使客户端重新发送任何数据,一旦这些数据发送失败。#注意,这些重试与客户端接收到发送错误时的重试没有什么不同。允许重试将潜在的改变数据的顺序,#如果这两个消息记录都是发送到同一个partition,则第一个消息失败第二个发送成功,则第二条消息会比第一条消息出现要早。properties:partitioner:class: com.yzy.demo.kafka.partitioner.CustomizePartitioner  #自定义分区linger:ms: 0 # 当生产端积累的消息达到batch-size或接收到消息linger.ms后,生产者就会将消息提交给kafka ,当linger.ms为0表示每接收到一条消息就提交给kafka,这时候batch-size其实就没用了retries: 0#producer可以用来缓存数据的内存大小。如果数据产生速度大于向broker发送的速度,#producer会阻塞或者抛出异常,以“block.on.buffer.full”来表明。#这项设置将和producer能够使用的总内存相关,但并不是一个硬性的限制,#因为不是producer使用的所有内存都是用于缓存。一些额外的内存会用于压缩(如果引入压缩机制),同样还有一些用于维护请求。buffer-memory: 33554432acks: all#key序列化方式key-serializer: org.apache.kafka.common.serialization.StringSerializervalue-serializer: org.apache.kafka.common.serialization.StringSerializer#消费者的配置consumer:properties:session:timeout:ms: 120000 # 消费会话超时时间(超过这个时间consumer没有发送心跳,就会触发rebalance操作)request:timeout:ms: 180000 # 消费请求超时时间# 当kafka中没有初始offset或offset超出范围时将自动重置offset# earliest:重置为分区中最小的offset;# latest:重置为分区中最新的offset(消费分区中新产生的数据);# none:只要有一个分区不存在已提交的offset,就抛出异常;      auto-offset-reset: latest#是否开启自动提交enable-auto-commit: false#自动提交的时间间隔auto-commit-interval: 100#key的解码方式key-deserializer: org.apache.kafka.common.serialization.StringDeserializer#value的解码方式value-deserializer: org.apache.kafka.common.serialization.StringDeserializer#在/usr/local/etc/kafka/consumer.properties中有配置group-id: yzy #【你自己配置的】sgrain: #异步线程池async-thread-pool:enable: true  #异步线程池组件开关,默认falsecorePoolSize: 5 #核心线程数,默认:Java虚拟机可用线程数maxPoolSize: 10  #线程池最大线程数,默认:40000queueCapacity: 25  #线程队列最大线程数,默认:80000threadNamePrefix: yzy-Async-ThreadPool- #自定义线程名前缀,默认:Async-ThreadPool-keepAliveSeconds: 300 #线程池中线程最大空闲时间,默认:60,单位:秒allowCoreThreadTimeOut: false #核心线程是否允许超时,默认falsewaitForTasksToCompleteOnShutdown: false #IOC容器关闭时是否阻塞等待剩余的任务执行完成,默认:false(必须设置setAwaitTerminationSeconds)awaitTerminationSeconds: 10 #阻塞IOC容器关闭的时间,默认:10秒(必须设置setWaitForTasksToCompleteOnShutdown)main:allow-bean-definition-overriding: true #允许多个feign bean 存在datasource:dynamic: # druid连接池配置primary: master #默认数据源datasource:master: #主库配置username: YZY@7808423C343F447E85D1E0167DA1D0D3  #TESTDBpassword: YZY@7808423C343F447E85D1E0167DA1D0D3  #TESTDBdriver-class-name: ${datasource_driver_class_name:com.mysql.cj.jdbc.Driver}url: ${datasource_url:jdbc:mysql://127.0.0.1:3306/TESTDB?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC}druid:initial-size: 5 #启动程序时,在连接池中初始化多少个连接max-active: 20 #连接池中最多支持多少个活动会话min-idle: 5 #回收空闲连接时,将保证至少有minIdle个连接max-wait: 60000 #程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池filters: stat,wall,slf4jslave: #从库配置username: YZY@7808423C343F447E85D1E0167DA1D0D3  #TESTDBpassword: YZY@7808423C343F447E85D1E0167DA1D0D3  #TESTDBdriver-class-name: ${datasource_driver_class_name:com.mysql.cj.jdbc.Driver}url: ${datasource_url:jdbc:mysql://127.0.0.1:3306/TESTDB?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC}druid:initial-size: 5 #启动程序时,在连接池中初始化多少个连接max-active: 20 #连接池中最多支持多少个活动会话min-idle: 5 #回收空闲连接时,将保证至少有minIdle个连接max-wait: 60000 #程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池filters: stat,wall,slf4jrabbitmq: #RabbitMq 配置virtual-host: /host: 127.0.0.1  #IPpost: 5672  #提供服务时的端口username: guest #连接RabbitMQ的账户password: guest #连接RabbitMQ的密码
redisson:config:host: 127.0.0.1:6379database: 0  #redis索引timeout: 3000 #等待节点回复命令的时间。该时间从命令发送成功时开始计时minIdle: 8  #从节点发布到订阅连接的最小空闲连接数size: 64 #连接池配置数量rbloomfilter:key: redisson.rbloomfilter.key  #布隆过滤器key值
mybatis-plus:global-config:db-config:#逻辑已删除值logic-delete-value: 1#逻辑未删除值logic-not-delete-value: 0sql-parser-cache: true # 是否缓存 Sql 解析,默认不缓存configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpltype-enums-package: com.yzy.demo.*mapper-locations: classpath*:mapping/*/*Mapper.xml  #MyBatis Mapper 所对应的 XML 文件位置
zk:host: 127.0.0.1:2181  #ZooKeeper连接namespace: yzy_distributeLock #命名空间只是用来区别不同的项目
mq:env: loacl #自定义变量,表示本地开发yzy:info:queue:name: ${mq.env}.middleware.mq.yzy.info.queue.byte  #队列名称 字节接受name1: ${mq.env}.middleware.mq.yzy.info.queue.type  #队列名称 对象接受fanoutqueue:  #基于FanoutExchange的消息模型实战(队列)name: ${mq.env}.middleware.mq.yzy.info.fanoutqueue.one  #队列名称name1: ${mq.env}.middleware.mq.yzy.info.fanoutqueue.two  #队列名称topicqueue: #基于TopicExchange的消息模型实战(队列)name: ${mq.env}.middleware.mq.yzy.info.topicqueue.onename1: ${mq.env}.middleware.mq.yzy.info.topicqueue.twodirectqueue: #基于DirectExchange的消息模型中的队列name: ${mq.env}.middleware.mq.yzy.info.directqueue.onename1: ${mq.env}.middleware.mq.yzy.info.directqueue.twomanualqueue: #消息确认模式name: ${mq.env}.middleware.mq.yzy.info.manualqueue.onedeadqueue: #死信队列name:  ${mq.env}.middleware.mq.yzy.info.deadqueue.oneexchange:name: ${mq.env}.middleware.mq.yzy.info.exchange.byte  #交换机名称 字节接受name1: ${mq.env}.middleware.mq.yzy.info.exchange.type  #交换机名称 对象接受directexchange: #基于DirectExchange的消息模型中的交换机name: ${mq.env}.middleware.mq.yzy.info.directexchange.onefanoutExchange:  #基于FanoutExchange的消息模型实战(交换机)name: ${mq.env}.middleware.mq.yzy.info.fanoutExchangetopicexchange: ##基于TopicExchange的消息模型实战(交换机)name: ${mq.env}.middleware.mq.yzy.info.topicexchange.onemanualexchange: #消息确认模式name: ${mq.env}.middleware.mq.yzy.info.manualexchange.onedeadexchange:  #死信交换机name: ${mq.env}.middleware.mq.yzy.info.deadexchange.oneproducer: #死信队列模型中基本交换机中的名称name: ${mq.env}.middleware.mq.yzy.info.deadexchange.producer.onerouting:key:name: ${mq.env}.middleware.mq.yzy.info.routing.key.byte  #路由名称 字节接受name1: ${mq.env}.middleware.mq.yzy.info.routing.key.type  #路由名称 对象接受directrouting: #基于DirectExchange的消息模型中的路由key:name: ${mq.env}.middleware.mq.yzy.info.directrouting.key.onename1: ${mq.env}.middleware.mq.yzy.info.directrouting.key.twotopicrouting: #基于DirectExchange的消息模型中的路由key:name: ${mq.env}.middleware.mq.yzy.info.topicrouting.*.keyname1: ${mq.env}.middleware.mq.yzy.info.topicrouting.#.keymanualrouting:key: #确认模式name: ${mq.env}.middleware.mq.yzy.info.manualrouting.key.onedeadrouting: #死信路由key:name: ${mq.env}.middleware.mq.yzy.info.deadrouting.key.oneproducer: #死信消息模型中 基本模型中的路由key:name: ${mq.env}.middleware.mq.yzy.info.deadrouting.producer.key.one
config:rabbitmq:  #多个消费者实例配置,主要针对高并发业务场景配置factory:concurrentConsumers: 10  #设置并发消费者实例的初始值maxConcurrentConsumers: 15  #设置并发消费者实例的最大数量prefetchCount: 10  #置并发消费者实例中每个实例拉取的消息数量session:timeOut: 5 #缓存的超时时间sessionTimeOut: 2 #分布式 sessionId 的超时时间sessionKey: SESSION_KEY #存放cookie的sessionId的key值head: yzy_ #缓存中的命名前缀【防缓存雪崩设计】log:flag: truefilter: com.yzy,com.baomidou.mybatisplusconfigLoad: configdecrypt:key: Yzy@1995217 #配置文件秘钥scheduled:flag: falsework_one: 0/5 * * * * ?audit:log:filter: 'com.yzy.demo'cors: true #处理ajax 跨域请求file:type: fastdfsfastdfs:groupName: group1tomcat:request: false # 开启请求类型拦截request-method: PUT,DELETE,CONNECT,OPTIONS,PATCH,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK,TRACE,HEAD   # 需要拦截的请求类型 默认拦截:PUT,DELETE,CONNECT,OPTIONS,PATCH,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK,UNLOCK,TRACE,HEADexception:switch: true  #全局异常stack: truecode: 9999info: 系统繁忙,请稍后再试!token:time: 3600
feign:hystrix:enabled: true # 开启使用熔断器httpclient:enabled: trueclient:config:default:connectTimeout: 10000 # 10s就超时readTimeout: 10000 # 10s就超时
ribbon:ReadTimeout: 2000   #请求处理的超时时间,单位为毫秒ConnectTimeout: 1000  #请求连接的超时时间,单位为毫秒MaxAutoRetries: 2  #对当前实例的重试次数MaxAutoRetriesNextServer: 1  #切换实例的重试次数,默认为1次
hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 10000 #设置超时限制时间,单位为毫秒
fdfs:# 链接超时connect-timeout: 60# 读取时间so-timeout: 60# 生成缩略图参数thumb-image:width: 150height: 150tracker-list: 192.168.60.23:22122
#actuator端口
management:server:port: 19001#修改访问路径  2.0之前默认是/   2.0默认是 /actuator  可以通过这个属性值修改endpoints:web:base-path: /actuator#开放所有页面节点  默认只开启了health、info两个节点exposure:include: '*'#显示健康具体信息  默认不会显示详细信息endpoint:health:show-details: alwaysshutdown:enabled: true  #启用shutdown端点,以便支持优雅停机
com:blog:value: ${random.value}  #随机字符串number: ${random.int}  # 随机intbignumber: ${random.long} #随机longnumber1: ${random.int(10)} # 10以内的随机数number2: ${random.int[10,20]} #10~20 的随机数

2. demo

import sys
from ruamel.yaml import YAML
import osdef convert_yaml_to_properties_format(yaml_file, output_file):yaml = YAML()yaml.preserve_quotes = Truetry:with open(yaml_file, 'r', encoding='utf-8') as file:yaml_content = yaml.load(file)print("YAML content loaded successfully.")except Exception as e:print(f"Error reading YAML file: {e}")returndef flatten_yaml(yaml_dict, parent_key='', sep='.'):items = []for k, v in yaml_dict.items():new_key = f"{parent_key}{sep}{k}" if parent_key else kif isinstance(v, dict):items.extend(flatten_yaml(v, new_key, sep=sep))else:# 获取注释comment = Noneif hasattr(v, 'ca'):if v.ca.comment and v.ca.comment[0]:comment = v.ca.comment[0].value.strip()items.append((new_key, v, comment))return itemstry:flattened_yaml = flatten_yaml(yaml_content)with open(output_file, 'w', encoding='utf-8') as file:last_root_key = Nonefor key, value, comment in flattened_yaml:root_key = key.split('.')[0]if last_root_key and last_root_key != root_key:file.write("\n")  # 在顶层键之间添加空行last_root_key = root_keyif comment:file.write(f"{key} = {value}  # {comment}\n")else:file.write(f"{key} = {value}\n")print(f"Output written to {output_file}")except Exception as e:print(f"Error writing output file: {e}")print("Processing complete.")# 示例用法
yaml_file = 'D://test//application-master.yml'
output_file = 'D://test//output.txt'# 检查输入文件是否存在
if not os.path.exists(yaml_file):print(f"Input YAML file does not exist: {yaml_file}")
else:convert_yaml_to_properties_format(yaml_file, output_file)sys.exit(0)

3. 测试

执行 python文件
生成:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【教程】新的Selenium!整合了隐藏浏览器指纹等功能

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 前景提要 driver Driver() 常用driver 接口 最后的话 前景提要 新的selenium,整合了隐藏浏览器指纹,非常好用&#x…

算法库应用--KMP算法解决串匹配问题

学习来源 学习贺利坚老师博客 数据结构例程——串的模式匹配(KMP算法)_数据结构模式匹配例题-CSDN博客 本人引导博客 串的匹配 (KPM算法由来引导)_kpm匹配失败-CSDN博客 转载大佬sofu博客 https://www.cnblogs.com/dusf/p/kmp.html 本人详细思路引导b战…

代码随想录算法训练营第四十九天| 300.最长递增子序列 , 674. 最长连续递增序列 , 718. 最长重复子数组

300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int lengthOfLIS(int[] nums) {int[] dp new int[nums.length];dp[0] 1;for(int i1;i<nums.length;i){for(int j0;j<i;j){if(nums[i] > nums[j]){dp[i] Math.max(dp[j],dp[i])…

【Spring Boot】关系映射开发(三):多对多映射

《JPA 从入门到精通》系列包含以下文章&#xff1a; Java 持久层 API&#xff1a;JPA认识 JPA 的接口JPA 的查询方式基于 JPA 开发的文章管理系统&#xff08;CRUD&#xff09;关系映射开发&#xff08;一&#xff09;&#xff1a;一对一映射关系映射开发&#xff08;二&#…

打造未来商业生态:从方法论到实践

在当今快速变化的商业环境中&#xff0c;企业需要不断创新和适应&#xff0c;以保持竞争力并实现可持续发展。为了帮助企业在这个复杂的市场中找到方向并成功转型&#xff0c;我们将深入探讨一系列关键概念和策略&#xff0c;包括复盘、赋能、抓手、对标、沉淀、对齐、拉通、倒…

主线程结束子线程不再执行

问题背景&#xff1a; 起因是在做分布式锁的时候&#xff0c;我在单元测试里面创建了10个线程&#xff0c;然后启动。每个线程都会在run方法打印内容&#xff0c;但是测试结果居然什么都没输出。就很纳闷&#xff0c;然后推测可能是主线程执行完了子线程直接结束了&#xff0c…

香橙派AIpro做目标检测

使用香橙派AIpro做目标检测 文章目录 使用香橙派AIpro做目标检测香橙派AIpro开发板介绍香橙派AIpro应用体验快速体验香橙派的AI功能YOLOV5s目标检测使用场景描述图像目标检测视频目标检测摄像头目标检测YOLOv5s 目标检测的运行结果分析香橙派 AIpro 在运行过程中的表现 香橙派A…

git杂记

git 安装&#xff1a; 在 Windows 上安装 Git 也有几种安装方法。 官方版本可以在 Git 官方网站下载。 打开 https://git-scm.com/download/win&#xff0c;下载会自动开始。 要注意这是一个名为 Git for Windows 的项目&#xff08;也叫做 msysGit&#xff09;&#xff0c;和…

深入解析目标检测中的尺度变化问题及其解决方案

摘要 目标检测是计算机视觉领域的核心任务之一&#xff0c;旨在识别图像中的目标对象并确定其位置。尺度变化问题是目标检测中的一个关键挑战&#xff0c;它涉及目标在不同图像中的大小差异。本文将深入探讨尺度变化问题的原因、影响以及解决策略&#xff0c;并提供一些代码示…

dify-on-wechat中的entrypoint.sh脚本

注解&#xff1a;因为ntwork类库不支持Linux环境&#xff0c;所以企业微信就放弃了容器部署。 通过dockerfile启动容器&#xff1a; cd dify-on-wechat/docker # 进入docker目录 docker compose up -d # 启动docker容器 docker logs -f dify-on-wechat # 查…

XML Schema 属性

XML Schema 属性 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的方式来描述 XML 文档中的元素、属性和数据类型。在 XML Schema 中,属性是用于提供有关元素的额外信息的标记,它们可以增强元素的功能和表达能力。本文将详细介绍 XML Schema 中的属…

基于Java+SpringMvc+Vue技术的实验室管理系统设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

游戏开发面试题4

局部变量全局变量 全局变量是定义在函数外部的变量&#xff0c;它可以在函数的内外部的任何地方被访问和使用。全局变量通常定义在程序的开头&#xff0c;在整个程序运行期间都是可用的。局部变量是定义在函数内部的变量&#xff0c;它只能在函数的内部被访问和使用。局部变量…

SUSAN

1995年英国牛津大学的S.M.Smith提出了一种新的图像边缘检测算法SUSAN算法,不同于以前经典边缘检测算法,SUSAN算法基于灰度相似性比较,采用圆形模板,对图像进行灰度差统计,无需计算方向导数,而且具备积分特性,它简单而且有效,适用于图像中边缘和角点的检测,可以去除图像…

土豆炒肉做法

菜单&#xff1a;土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程&#xff1a; 洗土豆&#xff0c;削皮&#xff0c;擦成条&#xff0c;用凉水过滤两遍淀粉&#xff0c;顺便放个燥里洗肉&#xff0c;切成条&#xff0c;按照生抽、酱油、淀粉、…

js好用的动态分页插件

js好用的动态分页插件是一款简单的分页样式插件&#xff0c;支持样式类型&#xff0c;当前页&#xff0c;每页显示数量&#xff0c;按钮数量&#xff0c;总条数&#xff0c;上一页文字&#xff0c;下一页文字&#xff0c;输入框跳转等功能。 js好用的动态分页插件

通过IDEA生成webapp及web.xml配置文件

1、选择File->Project Structure 2、选择Modules-> + -> Web 有的springboot工程选择是war工程,这个web可能已经存在了。 如果不存在,就手动创建,创建后,需要修改pom.xml中的配置 <packaging>war</packaging> 3、创建webapp根目录 这步重点就是创建…

介绍一款Java开发的商业开源MES系统

介绍一款Java开发的开源MES系统&#xff0c;万界星空科技开源的MES系统。该系统基于Java开发&#xff0c;具有广泛的适用性和高度的可定制性&#xff0c;能够满足不同行业、不同规模企业的智能制造需求。 一、系统概述 万界星空科技开源的MES系统是一款面向制造企业车间执行层…

第五十章 Web Service URL 汇总

文章目录 第五十章 Web Service URL 汇总Web 服务 URLWeb 服务的端点WSDL 使用受密码保护的 WSDL URL 第五十章 Web Service URL 汇总 本主题总结了与 IRIS 数据平台 Web 服务相关的 URL。 Web 服务 URL 与 IRIS Web 服务相关的 URL 如下&#xff1a; Web 服务的端点 http…