Эффективное удаление подкаталогов в dirnames из os.walk

На mac в python 2.7 при прохождении через каталоги с помощью os.walk мой скрипт проходит через «apps», то есть appname.app, так как это действительно просто справочники о себе. Ну, а позже в обработке я нахожу ошибки при прохождении через них. Я не хочу проходить через них так или иначе, поэтому для моих целей было бы лучше просто игнорировать эти типы «каталогов».

Итак, это мое текущее решение:

for root, subdirs, files in os.walk(directory, True): for subdir in subdirs: if '.' in subdir: subdirs.remove(subdir) #do more stuff 

Как вы можете видеть, второй цикл будет выполняться для каждой итерации поддиров, что не нужно, поскольку первый проход удаляет все, что я хочу удалить в любом случае.

Должен быть более эффективный способ сделать это. Есть идеи?

2 Solutions collect form web for “Эффективное удаление подкаталогов в dirnames из os.walk”

Вы можете сделать что-то подобное (предполагая, что вы хотите игнорировать каталоги, содержащие «.»):

 subdirs[:] = [d for d in subdirs if '.' not in d] 

Назначение среза (а не просто subdirs = ... ) необходимо, потому что вам нужно изменить тот же список, который использует os.walk , а не создавать новый.

Обратите внимание, что ваш исходный код неверен, потому что вы изменяете список, итерации по нему, что недопустимо.

Возможно, этот пример из документов Python для os.walk будет полезен. Он работает снизу вверх (удаление).

 # Delete everything reachable from the directory named in "top", # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name)) 

Я немного запутался в вашей цели, пытаетесь ли вы удалить поддеревье каталога и сталкиваетесь с ошибками, или пытаетесь пройти дерево и просто пытаетесь перечислить простые имена файлов (исключая имена каталогов)?

  • Каковы правила определения контекста списка в классе Python?
  • Получать строку, конвертировать для вычисления и отображения ответа, но .. Невозможно разделить
  • в чем разница между «transform» и «fit_transform» в sklearn
  • Заменить текст в textField с именем объекта - Pymel
  • Вызов макроса с параметрами: API-интерфейс Python win32com
  • удаление каждого n-го элемента из списка в python 2.7
  • не может запускать файл сценария python с помощью приглашения Windows
  • Fixing ": библиотека GMP или MPIR не найдена; Не создайте ошибку Crypto.PublickKey._fastmath "на Python 2.7 с CentOS 6.4
  • Python - лучший язык программирования в мире.