【发布时间】:2013-06-10 09:11:57
【问题描述】:
当目录中的文件数大于 2.500.000 时,使用 NTFS 和 Windows 7 遍历目录中所有文件的最快方法是什么? 所有文件都在顶级目录下。
目前我使用
for root, subFolders, files in os.walk(rootdir):
for file in files:
f = os.path.join(root,file)
with open(f) as cf:
[...]
但它非常非常慢。该进程已经运行了大约一个小时,仍然没有处理单个文件,但仍以每秒大约 2kB 的内存使用量增长。
【问题讨论】:
-
是否可以选择重新构建文件系统,以便您拥有一堆文件夹,而不是一个包含大量文件的文件夹,每个文件夹都包含一些文件?
-
是的,这是一个想法。但是在这里迭代和移动文件也需要很长时间?
-
平面目录或目录树中的 1000000000 个文件?在后一种情况下,树有多深?
-
@SylvainLeroux 抱歉,它被过度编辑了......实际上它在平面目录中的 2.5m
-
对于内存问题,尝试通过生成器交换“for file in files”(用于延迟评估):“ gen = (filex for filex in files); for file in gen: etc.”