Python如何在多级子目录文件中搜索指定字符串并返回匹配文件路径
实现逻辑说明
- 首先过滤glob返回的所有条目,排除目录只保留文件,避免读取目录触发IO错误
- 遍历每一个文件,尝试以ASCII编码打开读取,若触发编码错误则判定为非ASCII文件,直接跳过
- 对成功读取的内容判断是否包含目标字符串,匹配成功则记录文件路径
- 遍历完成后统一输出所有匹配的路径
完整代码
import glob import os # 可修改的配置项 SEARCH_DIR = r'C:\TEMP' # 原始字符串避免Windows路径转义 TARGET_NAME = "你要搜索的姓名" # 替换为实际要查找的字符串 result = [] # 递归获取目录下所有条目 all_path = glob.glob(os.path.join(SEARCH_DIR, '**'), recursive=True) for path in all_path: # 跳过目录,只处理文件 if not os.path.isfile(path): continue try: # 以ASCII编码读取,非ASCII文件会触发解码错误直接跳过 with open(path, 'r', encoding='ascii') as f: file_content = f.read() if TARGET_NAME in file_content: result.append(path) except UnicodeDecodeError: # 非ASCII编码文件,直接跳过 continue except PermissionError: # 无读取权限的文件跳过,可按需打开注释打印日志 # print(f"无权限读取:{path}") continue # 输出结果 print("包含目标字符串的文件路径:") for p in result: print(p)
注意事项
- 你原代码中
C:\TEMP直接写在字符串中会触发转义错误,必须加前缀r转为原始字符串,或者写为C:\\TEMP - 目前的逻辑是严格区分大小写匹配,如果你需要忽略大小写,可将匹配条件改为
TARGET_NAME.lower() in file_content.lower() - 2000个文件的规模下,当前单线程逻辑的运行速度完全满足需求,无需额外做并发优化
内容的提问来源于stack exchange,提问作者NeilMcKinney
相关产品推荐
相关产品推荐

