一、需求:
日常测试授权脚本,需要检查多个行业文件夹下单独的授权脚本和汇总授权脚本,一个文件根目录下有多个子文件夹,子文件夹下有多个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) return 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), sql_fragment)) compare_sql_in_files(root_dir, sql_fragment) return 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_fragment)) compare_sql_in_files(root_dir, sql_fragment) return print("未找到指定的 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 语句片段。
五、实现效果