Как пропустить каталоги в OS Walk Python 2.7
Я написал сценарий вырезания изображения, чтобы помочь с моей работой. Инструмент вырезает изображения по указанному расширению и сравнивает с хэш-базой данных.
Инструмент используется для поиска по подключенным дискам, на некоторых из которых установлены операционные системы.
Проблема, с которой я сталкиваюсь, заключается в том, что когда диск монтируется с операционной системой, он выполняет поиск в каталоге "Все пользователи" и включает в себя образы с моего локального диска.
Я не могу понять, как пропустить каталог "Все пользователи" и просто придерживаться подключенного диска.
Мой раздел для os.walk выглядит следующим образом:
for path, subdirs, files in os.walk(root):
for name in files:
if re.match(pattern, name.lower()):
appendfile.write (os.path.join(path, name))
appendfile.write ('\n')
log(name)
i=i+1
Любая помощь высоко ценится
1 ответ
Если предположить, All Users
это имя каталога, вы можете удалить каталог из вашего subdirs
список, так что os.walk()
не перебирает это.
Пример -
for path, subdirs, files in os.walk(root):
if 'All Users' in subdirs:
subdirs.remove('All Users')
for name in files:
if re.match(pattern, name.lower()):
appendfile.write (os.path.join(path, name))
appendfile.write ('\n')
log(name)
i=i+1
Если вы только хотите не ходить за All Users
внутри конкретного родителя, вы можете включить проверку для этого также в if
состояние.
От os.walk
документация -
os.walk (top, topdown = True, onerror = None, followlinks = False)
Генерируйте имена файлов в дереве каталогов, обходя дерево сверху вниз или снизу вверх. Для каждого каталога в дереве с корнем в вершине каталога (включая саму вершину) он выдает 3-кортеж (dirpath, dirnames, filenames).
Когда topdown имеет значение True, вызывающий может изменить список dirnames на месте (возможно, используя del или slice назначением), и walk() будет возвращаться только в подкаталоги, чьи имена остаются в dirnames; это может использоваться для сокращения поиска, наложения определенного порядка посещения или даже для информирования walk() о каталогах, которые вызывающий абонент создает или переименовывает, прежде чем он возобновит walk() снова. Изменение псевдонимов, когда topdown имеет значение False, неэффективно, поскольку в режиме снизу вверх каталоги в dirnames генерируются до того, как генерируется сам dirpath.
topdown
обычно верно, если не указано иное.
Если у вас есть несколько каталогов, которые вы хотите удалить, вы можете использовать назначение слайсов в oder для удаления исключенных каталогов в subdirs
excl_dirs = set(('All Users', 'some other dir'))
for path, subdirs, files in os.walk(root):
subdirs[:] = [d for d in subdirs if d not in excl_dirs]
...