2016-03-12 2 views
3

С os.listdir(some_dir), мы можем получить все файлы из some_dir, но иногда было бы 20M файлы (не суб-DIRS) под some_dir, это было бы долгое время, чтобы вернуть строки 20M от os.listdir().Python-2.x: список каталогов без os.listdir()

(Мы не думаем, что это мудрый вариант поставить 20M файлы в один каталог, но это на самом деле там и вне моего контроля ...)

Является ли это какой-либо другой метод генератор, как сделать выполните следующую операцию: после поиска файла, yield, мы выберем его, а затем следующий файл.

Я пробовал os.walk(), это действительно инструмент в стиле генератора, но он также вызывает os.listdir(), чтобы выполнить операцию списка, и он не может хорошо обрабатывать имена файлов в Юникоде (имена UTF-8 вместе с именами GBK).

+1

glob.iglob итератор ... – Benjamin

ответ

3

Если у вас есть питон 3.5+ вы можете использовать os.scandir() в документации для scandir

+2

И если вы на пре-3.5 Python, вы можете получить ['scandir' package] (https://pypi.python.org/pypi/scandir) для более ранних версий Python (это код, на котором был основан« os.scandir »3.5»). – ShadowRanger

+0

@ShadowRanger, очень полезный комментарий. пальцы вверх! – Saleem

 Смежные вопросы

  • Нет связанных вопросов^_^