Python3 - итерация по каталогу Linux без создания списка - PullRequest
0 голосов
/ 04 мая 2018

Повторю: Я начинаю изучать Python; тем не менее, мне нужно просмотреть содержимое каталога.

Я не хочу помещать содержимое каталога в массив и перебирать его с помощью цикла «for i in x», но зацикливать обработчик каталога. Я понимаю, что это было бы быстрее с массивом в памяти; тем не менее, я ограничен количеством места, которое импровизируется под «пространство пользователя» в памяти.

В связи с последним я хочу перебрать сам каталог. Каков наилучший способ сделать это в Python3 для Linux? Буду очень признателен за пример кода, так как я учусь.

-73

1 Ответ

0 голосов
/ 04 мая 2018

Вы не можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...