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

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

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

Связанный:

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

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

  • запуск BLAST (bl2seq) без создания файлов последовательности
  • Datetime Unix timestamp содержит миллисекунды
  • Как отправить EOF на Python sys.stdin из командной строки? CTRL-D не работает
  • Как конкатенировать идентификатор, указанный в двух строках?
  • Как найти точку монтирования файла?
  • Существуют ли стандартные условные обозначения командной строки для тире и аргументов?
  • C и Python - связь с сокетами
  • siginterrupt () работает только для первого сигнала? (Python)
  • Python - лучший язык программирования в мире.