Лучший способ получить список файлов с большим каталогом на python?

У меня сумасшедший большой каталог. Мне нужно получить файл списка через python.

В коде мне нужно получить итератор, а не список. Так что это не работает:

os.listdir
glob.glob  (uses listdir!)
os.walk

Я не могу найти любую хорошую библиотеку. Помогите! Может быть, С++ lib?

Ответ 1

Если у вас слишком большой каталог для чтения libc readdir(), вы, вероятно, захотите посмотреть на вызов ядра getdents() ( http://www.kernel.org/doc/man-pages/online/pages/man2/getdents.2.html). Я столкнулся с подобной проблемой и написал длинный пост в блоге об этом.

http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with-ls/

В принципе, readdir() только чтение 32K записей каталога за раз, и поэтому, если у вас много файлов в каталоге, readdir() займет очень много времени.

Ответ 3

Я думаю, что использование opendir будет работать, и есть пакет python: http://pypi.python.org/pypi/opendir/0.0.1, который обертывает его через pyrex

Ответ 4

Вы должны использовать генератор. Эта проблема обсуждается здесь: http://bugs.python.org/issue11406

Ответ 7

Как насчет glob.iglob? Это итератор glob.