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

Python中如何逐步遍历大型目录(非递归)且不预缓存所有文件?

非递归逐步遍历目录文件的最优选择
  • 优先使用os.scandir():它返回的是迭代器对象,会按需逐个读取目录条目,不会一次性将所有文件信息加载到内存中,完全满足你“逐步遍历、不预缓存大列表”的需求。从设计逻辑和实现机制来看,它就是为高效遍历大目录而生的——迭代器模式本身就意味着不会提前缓存全部结果。

  • 关于glob.iglob()的问题:你观察的没错,它的迭代器特性有局限性。当匹配模式涉及大量文件时,底层会先获取所有匹配项再逐个返回,本质还是把所有条目缓存到了内存里,不适合处理超大规模目录。

  • 简单示例代码:

import os

# 遍历目标目录,仅处理文件(跳过子目录)
with os.scandir("/your/target/directory") as entries:
    for entry in entries:
        if entry.is_file():
            print(entry.name)

额外提示:os.scandir()还能顺带获取文件元数据(如修改时间、大小),无需额外调用os.stat(),比传统的os.listdir()效率更高。

内容的提问来源于stack exchange,提问作者Mr.Kleiner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:05:23