Лучший способ получить список файлов с большим каталогом на 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() займет очень много времени.
Ответ 2
для python 2.X
import scandir
scandir.walk()
для python 3.5 +
os.scandir()
https://www.python.org/dev/peps/pep-0471/
https://pypi.python.org/pypi/scandir
Ответ 3
Я думаю, что использование opendir будет работать, и есть пакет python: http://pypi.python.org/pypi/opendir/0.0.1, который обертывает его через pyrex
Ответ 4
Вы должны использовать генератор. Эта проблема обсуждается здесь:
http://bugs.python.org/issue11406
Ответ 5
Я нашел эту библиотеку полезной: https://github.com/benhoyt/scandir.
Ответ 6
http://docs.python.org/release/2.6.5/library/os.html#os.walk
>>> import os
>>> type(os.walk('/'))
<type 'generator'>
Ответ 7
Как насчет glob.iglob? Это итератор glob.