当目录中的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.walk
, os.listdir
或glob.glob
首先构建所有文件的列表 )。 你可以尝试这样的事情:
import glob # ... for infile in glob.iglob( os.path.join(rootdir, '*.*') ): # ...