Вы не можете использовать os.listdir
, поскольку он возвращает list
, но вы можете использовать scandir
, который возвращает итератор . Итератор не загружает содержимое каталога, но выдает файлы один за другим. Он не потребляет столько памяти, сколько os.listdir
, и вы можете остановить его, когда захотите.
os.scandir (путь = '')
Возвращает итератор объектов os.DirEntry, соответствующих записям в каталоге, заданном путем. Записи приводятся в произвольном порядке, а специальные записи '.' и «..» не включены.
Также хороший побочный эффект:
Использование scandir () увеличивает скорость os.walk () в 2-20 раз (в зависимости от платформы и файловой системы), в большинстве случаев избегая ненужных вызовов os.stat ().
Наилучшее увеличение скорости происходит на самом деле при использовании Windows, я использовал это на сетевом диске в Windows для программы, которая проверяла, являются ли записи файлы или каталоги, и ускорил код на 800%
Небольшой пример, который печатает только файлы из пути:
with os.scandir(path) as it:
for entry in it:
if entry.is_file():
print(entry.name)
Это доступно из python 3.5. Если у вас более старая версия, пакет pypi делает то же самое: scandir
, просто используйте scandir.scandir
вместо os.scandir