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

寻求高效查找指定子文件夹的Python优化方案

大数量文件夹扫描的优化方案

原代码的性能瓶颈

  • 原代码通过os.listdir()遍历后,对每个条目调用os.path.isdir(),每个调用都会触发一次独立的系统I/O操作,在30万级别的文件规模下,累计的系统调用开销会导致严重卡顿。
  • 仅需判断名称开头匹配的场景下,使用re.match()属于过度设计,正则引擎的初始化和匹配逻辑会带来不必要的性能损耗。

优化后的代码

import os

def find_subfolders_of_interest(dir_of_interest, starting_string_of_interest):
    target_subfolders = []
    # 使用os.scandir()一次性获取文件元数据,避免重复系统调用
    with os.scandir(dir_of_interest) as entries:
        for entry in entries:
            # 利用DirEntry内置的is_dir()方法,无需额外I/O操作
            if entry.is_dir() and entry.name.startswith(starting_string_of_interest):
                target_subfolders.append(entry.name)
    return target_subfolders

def main():
    all_subfolders_of_interest = find_subfolders_of_interest('test_folder', 'string_of_interest')

if __name__ == '__main__':
    main()

额外优化建议

  • 如果后续匹配规则变得复杂,再考虑使用预编译正则表达式;简单匹配场景下,字符串原生方法的性能始终更优。
  • 若需要递归扫描多层子文件夹,Python3.5+版本的os.walk()底层已采用scandir实现,性能同样出色;仅单层扫描时,scandir是最优选择。
  • 针对超大规模目录,可尝试多进程并行扫描,但需注意I/O密集型任务的多进程开销,建议先做小范围测试验证收益。

内容的提问来源于stack exchange,提问作者BobInBaltimore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:32:08