迭代文件夹中的大量文件

当目录中的filecount大于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的内存使用量增长。

默认情况下, os.walk从下往上走目录树。 如果你有一个有很多叶子的深层树,我这可能会导致表演处罚 – 或者至少是增加“静态”时间,因为在处理第一个文件之前, walk必须读取大量数据。

所有这些都是猜测,你有没有试图强制自上而下的探索:

 for root, subFolders, files in os.walk(rootdir, topdown=True): ... 

编辑:

由于文件似乎在一个平面目录,也许glob.iglob可以留下更好的性能,通过返回一个迭代器(而其他方法如os.walkos.listdirglob.glob首先构建所有文件的列表 )。 你可以尝试这样的事情:

 import glob # ... for infile in glob.iglob( os.path.join(rootdir, '*.*') ): # ...