【懒人工具】指定新文件,替换全盘旧文件
没辙,就是懒
最近在调整.clang-format,这个format文件要跟着项目走,只换本地默认的还不够。调整好以后一个项目一个项目的换,有时候会漏掉,索性全盘一次性换完。
基于自己操作的流程,写了个脚本,备忘的同时分享一下
用法:
def print_usage():usage = """使用方法:python UpdateAllFile.py 需要替换的文件名 搜索用正则表达式 过滤关键字记录的文件路径在当前路径下找到需要替换的新文件根据everything搜索用的正则表达式在全盘搜索根据过滤关键字记录的文件里面的记录过滤出来需要被替换的文件用当前路径下的新文件替换需要被替换的文件,如果被替换的文件是只读会先改为可读写"""print(usage)
准备1
安装everything
准备2
下载 Everything 命令行接口:es.exe官网链接,exe所在路径下载解压加入path
脚本
import pandas as pd
import os
import shutil
import sys
import subprocessdef load_filters(filter_file):"""从文件加载过滤路径关键字,返回关键字列表"""try:with open(filter_file, 'r') as f:return [line.strip() for line in f if line.strip()]except FileNotFoundError:return []def save_filters(filter_file, filters):"""将过滤路径关键字保存到文件"""with open(filter_file, 'w') as f:for filter_item in filters:f.write(filter_item + '\n')def main(target_src_file,targetfile_regx,filter_file):filters = load_filters(filter_file) # 从文件加载过滤路径关键字# 通过everything查找所有.clang-format文件try:result = subprocess.run(['es.exe', '-r', targetfile_regx], capture_output=True, text=True, check=True)# 将输出按行分割,并去除空行formatfiles = [line for line in result.stdout.splitlines() if line.strip()]except subprocess.CalledProcessError as e:print(f"执行命令时出错: {e}")returnexcept Exception as e:print(f"发生未知错误: {e}")returnwhile True:# 过滤掉包含指定关键字的文件路径,也排除当前文件formatfiletargets = [file for file in formatfiles if not any(f in file for f in filters) and file != target_src_file]# 打印过滤后的文件列表print("以下是将要被替换的文件:")for file in formatfiletargets:print(file)# 确认confirmation = input("继续 -> 输入 'yes' 或直接按回车\n退出 -> 输入 'no'\n增加新的过滤关键字 -> 输入新的关键字 \n我要 : ")if confirmation.lower() == 'yes' or confirmation == '':breakelif confirmation.lower() == 'no':print("操作已取消。")returnelse:new_filter = confirmation.strip()filters.append(new_filter)print(f"已添加过滤关键字: {new_filter}")# 输出更新后的过滤关键字到文件save_filters(filter_file, filters)# 新文件路径new_file_path = target_src_file# 替换旧文件for formatfile in formatfiletargets:try:# 确保旧文件存在if os.path.exists(formatfile):# 检查旧文件的只读属性if not os.access(formatfile, os.W_OK):# 取消只读属性os.chmod(formatfile, 0o666) # 设置为可读可写# 替换旧文件为新文件shutil.copy(new_file_path, formatfile) # 用新文件替换旧文件print(f"已用新文件替换旧文件: {formatfile}")else:print(f"旧文件不存在: {formatfile}")except Exception as e:print(f"处理文件时出错: {e}")def check_pwd_for_file(targetfile):"""检查当前路径下是否存在targetfile文件,存在则返回文件路径,不存在则返回空字符串。"""current_path = os.getcwd() clang_format_file = os.path.join(current_path, targetfile) if os.path.isfile(clang_format_file): return clang_format_fileelse:return ""def print_usage():usage = """使用方法:python UpdateAllClangFormat.py 需要替换的文件名 搜索用正则表达式 过滤关键字记录的文件路径在当前路径下找到需要替换的新文件根据搜索用的正则表达式在全盘搜索根据过滤关键字记录的文件里面的记录过滤出来需要被替换的文件用当前路径下的新文件替换需要被替换的文件,如果被替换的文件是只读会先改为可读写"""print(usage)def get_filename_from_path(file_path):return os.path.basename(file_path)if __name__ == "__main__":para_from_cmd = False # 是否从命令行参数中获取参数targetfile = r'.clang-format' # 要查找的文件名targetfile_regx = r'^\.clang-format$' # 正则表达式:匹配要查找的文件名filter_file = r'D:\mybin\format.filter' # 过滤关键字文件if para_from_cmd :# 检查输入的参数if len(sys.argv) != 4 :print_usage()else:targetfile = sys.argv[1]targetfile_regx = sys.argv[1]filter_file = sys.argv[1]target_src_file = check_pwd_for_file(targetfile)if target_src_file != "":print(f"TargetFile : \"{targetfile}\"")print(f"TargetFile regx str : \"{targetfile_regx}\"")print(f"File under PWD : \"{target_src_file}\"")# 确认confirmation = input("请确认\n继续 -> 直接按回车\n退出 -> 输入 'no'或'n'\n我要 : ")if confirmation.lower() == 'no' or confirmation.lower() == 'n':print("操作已取消。")exit(0)main(target_src_file,targetfile_regx, filter_file)else:print(f"当前路径没找到{targetfile}")
相关文章:
【懒人工具】指定新文件,替换全盘旧文件
没辙,就是懒 最近在调整.clang-format,这个format文件要跟着项目走,只换本地默认的还不够。调整好以后一个项目一个项目的换,有时候会漏掉,索性全盘一次性换完。 基于自己操作的流程,写了个脚本࿰…...
React+Vis.js(02):设置节点样式
文章目录 1、修改vis.js的节点和关系颜色2、修改vis.js节点的字体颜色2.1 统一设置节点字体颜色2.2 自定义某个节点的字体颜色3、设置vis.js节点的边框颜色和宽度3.1 设置单个节点3.2 统一设置1、修改vis.js的节点和关系颜色 在vis.js中,可以通过color属性,来给node节点添加…...
3G网络要彻底没了
2月21日,三大运营商公布了最新的用户数据,移动联通电信三家5G套餐用户数合计超过了7.5亿。信通院早前公布的数据显示,一月份,国内市场5G手机出货量2632.4万部,占同期手机出货量的79.7%。 这两项数据,说明我们已经进入到了5G时代,5G的普及速度远超很多人的想象。就在5G逐…...
如何配置ESXI主机的IP地址管理
🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…...
软件测试学习笔记丨测试用例设计方法
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/31921 一,黑盒测试方法论 1,等价类 1.1 定义 等价类划分是一种重要的、常用的黑盒测试方法不需要考虑程序的内部结构,只需要考虑程序的输入规格即可它将…...
MinIO基本用法
在现代云计算和大数据领域,对象存储因其可扩展性、可靠性和低成本成为数据存储的重要选择。MinIO作为一个高性能、分布式的对象存储系统,凭借其开源、简单易用以及与Amazon S3兼容的特性,在业界得到了广泛的应用。本文将带您了解MinIO的基本用…...
MySQL windows版本安装
一、下载MySQL安装包 访问MySQL官网:首先,访问MySQL的官方网站(MySQL),或者更具体地,访问MySQL的下载页面(MySQL :: Download MySQL Community Server)。 选择适合的版本࿱…...
Python实现人脸轮廓提取
目录 一、背景知识1.1 人脸检测和轮廓提取的意义1.2 人脸检测方法概述1.3 轮廓提取方法概述二、常用的人脸轮廓提取方法2.1 基于边缘检测的轮廓提取2.2 基于形态学操作的轮廓提取2.3 基于特征点检测的轮廓提取三、Python实现人脸轮廓提取3.1 安装依赖库3.2 使用Dlib进行人脸检测…...
Prettier+Vscode setting提高前端开发效率
文章目录 前言Prettier第一步:下载依赖(团队合作)或下载插件(独立开发)第二步:添加.prettierrc.json文件**以下是我使用的****配置规则** 第三步:添加.prettierignore文件**以下是我常用的****配…...
YOLOv10实时端到端目标检测
文章目录 前言一、非极值大抑制(NMS)二、NMS算法的具体原理和步骤三、YOLOV10创新点四、YOLOv10使用教程五、官方github地址 前言 距离上次写YOLOv5已经过去了两年,正好最近用YOLOv10重构了项目,总结下YOLOv10。 YOLOv10真正实时端到端目标检测ÿ…...
Java中的Annotation注解
常用注解 override:重写方法deprecated:弃用SuppressWarnings:抑制编译器警告 元注解(注解的注解) Target:描述注解所能修饰的类型Retention:描述注解的生命周期(SOURCE源代码、C…...
小五金加工:细节决定产品质量与性能
在小五金加工领域,细节往往决定着最终产品的质量、性能以及市场竞争力。看似微不足道的细微之处,实际上蕴含着巨大的影响。时利和将介绍小五金加工中细节的重要性。 首先,细节关乎产品的精度。小五金零件通常尺寸较小,但对精度的要…...
VS Code安装配置ssh服务结合内网穿透远程连接本地服务器详细步骤
文章目录 前言1. 安装OpenSSH2.VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…...
世界首位「AI科学家」问世!独立生成10篇学术论文! 横扫「顶会」?
大家好,我是 Bob! 😊 一个想和大家慢慢变富的 AI 程序员💸 分享 AI 前沿技术、项目经验、面试技巧! 欢迎关注我,一起探索,一起破圈!💪 AI科学家出世 最近一位人工智能AI科学家横空出世。 它是…...
【高阶数据结构】图
图 1. 图的基本概念2. 图的存储结构2.1 邻接矩阵2.2 邻接表2.3 邻接矩阵的实现2.4 邻接表的实现 3. 图的遍历3.1 图的广度优先遍历3.2 图的深度优先遍历 4. 最小生成树4.1 Kruskal算法4.2 Prim算法 5. 最短路径5.1 单源最短路径--Dijkstra算法5.2 单源最短路径--Bellman-Ford算…...
调研-音视频
音视频 基础概念主要内容音频基础概念音频量化过程音频压缩技术视频基础概念视频bug视频编码H264视频像素格式YUVRGB参考文献基础概念 ● 实时音视频应用环节 ○ 采集、编码、前后处理、传输、解码、缓冲、渲染等很多环节。 主要内容 音频 基础概念 三要素:音调(音频)、…...
【数据结构】链式结构实现:二叉树
二叉树 一.快速创建一颗二叉树二.二叉树的遍历1.前序、中序、后序遍历(深度优先遍历DFS)2.层序遍历(广度优先遍历BFS) 三.二叉树节点的个数四.二叉树叶子节点的个数五.二叉树的高度六.二叉树第k层节点个数七.二叉树查找值为x的节点…...
20221元组
在Python语言中, (7)是一种可变的、有序的序列结构,其中元素可以重复。 A.元组(tuple) B. 字符串(str) C. 列表(list) D.集合(set) ChatGPT 说: ChatGPT 在Python中,选项 C 列表(list) 符合题目描述。 解释: 列表 (list) 是一种可变的、有…...
艾瑞白皮书解读(三)丨剖析制造业、工程设计、创投数据治理痛点与典型方案
2024年7月 艾瑞咨询公司对国内数据治理行业进行了研究,访问了国内多位大中型企业数据治理相关负责人,深度剖析中国企业在数字化转型过程中面临到的核心数据问题后,重磅发布《2024中国企业数据治理白皮书》(以下简称“白皮书”&…...
如何在 Odoo 16 Studio 模块中自定义视图和报告
为了有效地运营公司,需要定制的软件系统。Odoo 平台提供针对单个应用程序量身定制的管理解决方案和用户友好的界面,以便开发应用程序,而无需更复杂的后端功能。该平台支持使用简单的拖放功能和内置工具创建和修改更多定制的 Odoo 应用程序。企…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
