Как я могу предотвратить прохождение Python os.walk через точки монтирования? - PullRequest
7 голосов
/ 23 февраля 2009

В Unix все диски отображаются как пути в основной файловой системе, поэтому os.walk('/') будет проходить, например, /media/cdrom, а также основной жесткий диск, что нежелательно для некоторых приложений.

Как получить os.walk, который остается на одном устройстве?

Связанный:

Ответы [ 3 ]

15 голосов
/ 23 февраля 2009

Из os.walk документов:

Когда topdown имеет значение true, вызывающая сторона может изменить список dirnames на месте (возможно, используя del или slice присваивать), и ходить () будет только зайти в подкаталоги которых имена остаются в именах; это может быть используется для сокращения поиска

Так что-то вроде этого должно работать:

for root, dirnames, filenames in os.walk(...):
  dirnames[:] = [
    dir for dir in dirnames
    if not os.path.ismount(os.path.join(root, dir))]
  ...
3 голосов
/ 23 февраля 2009

Я думаю, os.path.ismount может работать для вас. Ваш код может выглядеть примерно так:

import os
import os.path
for root, dirs, files in os.walk('/'):
    # Handle files.
    dirs[:] = filter(lambda dir: not os.path.ismount(os.path.join(root, dir)), 
                  dirs)

Вы также можете найти этот ответ полезным для построения вашего решения.

* Спасибо за комментарии по фильтрации dirs правильно.

1 голос
/ 23 февраля 2009

os.walk() не могу сказать (насколько я знаю), что он просматривает другой диск. Вам нужно будет это проверить самостоятельно.

Попробуйте использовать os.stat() или убедитесь, что корневая переменная из os.walk() не /media

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