python脚本多个文件夹下多个文件中sql语句片段比对

一、需求:

日常测试授权脚本,需要检查多个行业文件夹下单独的授权脚本和汇总授权脚本,一个文件根目录下有多个子文件夹,子文件夹下有多个sql文件,人为比对较为耗时。

需要实现在文件中找到某个sql语句片段,然后遍历比对此sql语句片段在各目录各文件中是否一致。

二、思路:

该脚本将遍历根目录下的所有子文件夹中的 SQL 文件,检查在根目录下的多个文件中是否都存在匹配的 SQL 语句,并在找到匹配的文件时输出相应路径信息。

三、python代码

import os#遍历各目录各文件,寻找有此sql语句的文件,并打印出对应文件的路径
def find_sql(root_dir, sql_fragment):for dirpath, dirnames, filenames in os.walk(root_dir):for filename in filenames:if filename.endswith(".sql"):filepath = os.path.join(dirpath, filename)try:with open(filepath, 'r', encoding='utf-8') as file:sql_content = file.read()if sql_fragment in sql_content:print("在文件 {} 中找到了指定的 SQL 语句片段:{}".format(os.path.abspath(filepath), sql_fragment))compare_sql_in_files(root_dir, sql_fragment)returnexcept UnicodeDecodeError:try:with open(filepath, 'r', encoding='utf-8-sig') as file:sql_content = file.read()if sql_fragment in sql_content:print("在文件 {} 中找到了指定的 SQL 语句片段:{}".format(os.path.abspath(filepath), sql_fragment))compare_sql_in_files(root_dir, sql_fragment)returnexcept UnicodeDecodeError:with open(filepath, 'r', encoding='gbk') as file:sql_content = file.read()if sql_fragment in sql_content:print("在文件 {} 中找到了指定的 SQL 语句片段:{}".format(os.path.abspath(filepath), sql_fragment))compare_sql_in_files(root_dir, sql_fragment)returnprint("未找到指定的 SQL 语句片段:{}".format(sql_fragment))
#包含此sql语句的文件进行内容比对
def compare_sql_in_files(root_dir, sql_fragment):for dirpath, dirnames, filenames in os.walk(root_dir):for filename in filenames:if filename.endswith(".sql"):filepath = os.path.join(dirpath, filename)try:with open(filepath, 'r', encoding='utf-8') as file:sql_content = file.read()if sql_fragment in sql_content:print("在文件 {} 中找到了与指定的 SQL 语句片段一致的内容".format(os.path.abspath(filepath)))except UnicodeDecodeError:try:with open(filepath, 'r', encoding='utf-8-sig') as file:sql_content = file.read()if sql_fragment in sql_content:print("在文件 {} 中找到了与指定的 SQL 语句片段一致的内容".format(os.path.abspath(filepath)))except UnicodeDecodeError:with open(filepath, 'r', encoding='gbk') as file:sql_content = file.read()if sql_fragment in sql_content:print("在文件 {} 中找到了与指定的 SQL 语句片段一致的内容".format(os.path.abspath(filepath)))# 在此处指定根目录和要查找的 SQL 语句片段
root_dir = "D:/hswork/PB2.0/环境搭建_任务/svn脚本/202301.03版本/升级脚本-2023-11-21/升级脚本/01开通脚本/"    #授权文件根目录
sql_fragment = "update pub_tsysparameter set visible_flag='1'  where sysparam_no = 400264;"   #要查找的 SQL 语句片段# 调用函数开始查找和比对
find_sql(root_dir, sql_fragment)

 

四、使用

将 根目录 替换为实际的根目录路径,并将 要查找的 SQL 语句片段 替换为实际要查找的 SQL 语句片段。

五、实现效果

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

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

相关文章

ChatGPT 和文心一言,各有优劣

目录 前言 具体比较 智能回复能力 语言准确性 知识库丰富度 生成内容风格 总结 前言 近年来,随着人工智能技术的不断进步,AI助手已成为人机交互的重要载体。其中代表性的两个AI助手系统分别是OpenAI推出的ChatGPT,以及腾讯研发的文心一言。这两个…

mysql 为大表新增字段或索引

1 问题 mysql 为大表增加或增加索引等操作时,直接操作原表可能会因为执行超时而导致失败。解决办法如下。 2 解决办法 (1)建新表-复制表A 的数据结构,不复制数据 create table B like A; (2)加字段或索…

SCSI/UFS储存架构/协议/电源管理/命令处理流程

UFS子系统架构 1.UFS协议 无论是ufs host controller部分还是ufs device部分,他们都将遵循统一的UFS规范 UFS Application Layer(UAP)应用层 1.UFS command set (UCS) UCS处理命令集,如读、写命令等,.使用的命令是简化的SCSI命令(…

枚举类型缝缝补补

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 1.关键字enum的定义 enum是C语言中的一个关键字,enum叫枚举数据类型&#…

【数据结构】哈希表详解,举例说明 java中的 HashMap、HashTable及其区别

一、哈希表(Hash Table)简介: 哈希表是一种数据结构,用于实现字典或映射等抽象数据类型。它通过把关键字映射到表中的一个位置来实现快速的数据检索。哈希表的基本思想是利用哈希函数将关键字映射到数组的索引位置上,…

Android WorkManager入门(二)

WorkManager入门 上一篇前言创建 WorkRequest并提交 定时的任务(PeriodicWorkRequest)配合约束使用定义执行范围失败后的重试为WorkRequest打上TAG其他取消方法 传参和返回参数总结参考资料 上一篇 Android WorkManager入门(一) …

GZ036 区块链技术应用赛项赛题第3套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷(3卷) 任 务 书 参赛队编号: 背景描述 新能源作为新兴领域,产业呈现碎片化与复杂化的特性,逐渐出现管理困难、供应链金融、可信监管与数…

OpenAI GPT应用商城正式上线!超300万个GPT应用供选择

原创 | 文 BFT机器人 千呼万唤始出来,终于在北京时间1月11日凌晨,OpenAI在官网发布了令人振奋的消息:备受瞩目的GPT store正式上线! 这个商店旨在让团体和企业用户轻松找到那些既实用又热门的GPT应用。在这里,用户可以…

rust使用protobuf

前言 c,java,go 等直接是用 ,具体就不说了,这章主要讲述rust 使用protobuf 这章主要讲述2种 1 > protoc protoc-gen-rust plugin 2> protoc prost-build 1:环境 win10 rustrover64 25-2 下载地址 https://github.com/protocolbu…

线性代数基础【5】特征值和特征向量

第五章 特征值和特征向量 第一节、特征值和特征向量的基本概念 一、特征值和特征向量的理论背景 在一个多项式中,未知数的个数为任意多个,且每一项次数都是2的多项式称为二次型,二次型分为两种类型:即非标准二次型及标准二次型 注意: ①二次型X^T AX为非标准二次型的充分必…

Git学习笔记(第3章):Git常用命令

目录 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库状态 3.4 添加暂存区 3.5 提交本地库 3.6 历史版本 3.7 修改文件 3.8 版本穿梭 小结 命令 作用 git config --global user.name 用户名 设置用户签名 git config --global user.email 邮箱 设置用户签名 …

大模型学习与实践笔记(六)

一、finetune 简介 两种微调模式:增量预训练 与指令跟随 1.增量预训练 2.指令微调 二、LoRA 与 QLoRA 介绍 三、XTuner 介绍 四、低显存玩转LLM的方法