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
相关产品推荐
相关产品推荐

