Итерации по очень большому количеству файлов в папке

Каков самый быстрый способ перебора всех файлов в каталоге с использованием NTFS и Windows 7, когда размер файла в каталоге превышает 2,500,000? Все файлы находятся в папке верхнего уровня.

В настоящее время я использую

for root, subFolders, files in os.walk(rootdir): for file in files: f = os.path.join(root,file) with open(f) as cf: [...] 

но это очень медленно. Процесс работает около часа и до сих пор не обработал ни одного файла, но все еще растет с примерно 2 Кбайт использования памяти в секунду.

По умолчанию os.walk идет по дереву каталогов снизу вверх. Если у вас есть глубокое дерево со множеством листьев, я думаю, это может привести к штрафам за действия – или, по крайней мере, за увеличение времени «statup», так как walk должна прочитать много данных перед обработкой первого файла.

Все это было спекулятивным, пытались ли вы провести исследования по разминированию:

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

РЕДАКТИРОВАТЬ:

Поскольку файлы, как представляется, находятся в плоском каталоге, возможно, glob.iglob может оставить более высокую производительность, возвращая итератор (тогда как другие методы, такие как os.walk , os.listdir или glob.glob сначала glob.glob список всех файлов). Не могли бы вы попробовать что-то вроде этого:

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