搜索引擎网站建设代码seo公司厦门
没辙,就是懒
最近在调整.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}")