├── README.md └── 两次正则搜索5.py /README.md: -------------------------------------------------------------------------------- 1 | 1 本程序用于搜索两遍正则 2 | 比如你希望找一个文档里, 包含123 又包含789的文本文档. 123和789的位置不固定,可能是任何位置. 就可以用这个程序.第一遍输入123,第二遍搜索789. 3 | 原理是先搜索路径下包含123的文档, 然后在已经搜到的这些文档下,再次搜索包含789的文档. 4 | 2 两次正则搜索4会生成一个pdf文件,但是这个代码遇到中文路径会闪退,所以一般两次正则搜索3.exe就够用. 当时生成pdf的目的是为了方便打开结果的txt查看.而网页版不可以打开一个外部程序,txt倒是可以查看. 5 | 如果大佬们知道为啥这个pdf代码不支持中文路径,麻烦告知一下 6 | 7 | 正则怎么用可以用chatgpt生成对应的正则表达式.另外直接输入内容就可以搜索对应的内容. 8 | 比如搜索123,可以直接输入123. 或者\b123\b 这个\b是边界的意思.就是把123当做一个词汇来搜. 具体复杂的还是推荐用chatgpt生成正则表达式来搜索. 9 | 10 | --------------------------------------------------------- 11 | 12 | 更新说明: 13 | 两次正则搜索5: 14 | 现在路径可以增加很多条,用英文逗号分割,比如 15 | C:\新建文件夹,C:\Users 16 | 增加win7版本 17 | -------------------------------------------------------------------------------- /两次正则搜索5.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | from tqdm import tqdm 4 | from datetime import datetime 5 | 6 | 7 | def generate_html_file(result_list): 8 | """ 9 | 生成包含搜索结果的 HTML 文件 10 | """ 11 | with open("search_result.html", 'w',encoding="utf8") as f: 12 | title = "Search Result" 13 | f.write(f"\n\n\n\n{title}\n\n\n") 14 | f.write(f"

{title}

\n") 15 | for file in result_list: 16 | f.write(f"

{file}

\n") 17 | f.write("\n\n") 18 | print(f"结果已保存至 search_result.html 中。") 19 | 20 | 21 | # 定义文件名和路径 22 | filename = "search_result.txt" 23 | path = "" 24 | 25 | 26 | while True: 27 | # 输入扩展名和路径 28 | extensions = input("请输入要搜索的扩展名(用英文逗号分隔 例如 txt,xml):") 29 | extension_list = extensions.split(',') 30 | 31 | 32 | paths = input("请输入文件路径(用英文逗号分隔):") 33 | path_list = paths.split(',') 34 | 35 | 36 | # 输入首个正则表达式和次个正则表达式 37 | regex_1 = input("请输入首个搜索文本,支持正则表达式:") 38 | regex_2 = input("请输入次个搜索文本,支持正则表达式:") 39 | 40 | # 遍历路径及子路径,获取满足扩展名条件的文件列表 41 | file_list = [] 42 | 43 | # 遍历每个路径及其子路径,获取满足扩展名条件的文件列表 44 | for path in path_list: 45 | for root, dirs, files in tqdm(os.walk(path), desc="正在遍历文件..."): 46 | for file in files: 47 | if file.endswith(tuple(extension_list)): 48 | file_list.append(os.path.join(root, file)) 49 | 50 | 51 | result_list = [] 52 | # 对满足扩展名条件的文件进行内容搜索 53 | for file in tqdm(file_list, desc="正在搜索文件..."): 54 | with open(file, 'r') as f: 55 | content = f.read() 56 | if re.search(regex_1, content) and re.search(regex_2, content): 57 | result_list.append(file) 58 | 59 | if result_list: 60 | # 输出搜索到的文件列表 61 | print("以下文件包含搜索到的内容:") 62 | for file in result_list: 63 | print("-", file) 64 | 65 | # 将搜索结果追加到文件,并同时保存为逆序格式 66 | now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') 67 | with open(filename, 'a') as f: 68 | f.write(f"\n\n搜索时间:{now}\n") 69 | for file in reversed(result_list): 70 | f.write(f"{file}\n") 71 | 72 | # 生成包含搜索结果的 HTML 文件 73 | generate_html_file(result_list) 74 | 75 | else: 76 | print("未找到任何符合条件的文件。") 77 | 78 | # 询问是否继续搜索 79 | choice = input("按回车键继续,退出请关闭窗口:") 80 | if choice.upper() == 'N': 81 | break 82 | --------------------------------------------------------------------------------