You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:36:04