Как я могу запретить пропуску Python входить через точки монтирования?

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

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

Связанный:

  • Есть ли способ определить, находится ли подкаталог в одной файловой системе из python при использовании os.walk?

  • Обеспечение того, чтобы моя программа не выполняла одновременную запись файла
  • Обозначения Unix filename в Python?
  • Как конкатенировать идентификатор, указанный в двух строках?
  • многопроцессорность и сбор мусора
  • Есть ли эквивалент python утилиты unix «file»?
  • пытается установить lxml на max osx leopard
  • pyvenv-3.4 возвратил ненулевой статус выхода 1
  • Python Fabric: Как обрабатывать произвольное приглашение командной строки для ввода?
  • 3 Solutions collect form web for “Как я могу запретить пропуску Python входить через точки монтирования?”

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

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

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

     for root, dirnames, filenames in os.walk(...): dirnames[:] = [ dir for dir in dirnames if not os.path.ismount(os.path.join(root, dir))] ... 

    Я думаю, что 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 правильно.

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

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

    Python - лучший язык программирования в мире.