Мне нужно обработать все файлы в дереве каталогов рекурсивно, но с ограниченной глубиной.Python 3 - дерево каталога каталогов с ограниченной глубиной рекурсии
Это означает, например, искать файлы в текущем каталоге и в первых двух уровнях подкаталога, но не дальше. В этом случае я должен обработать, например. ./subdir1/subdir2/file
, но не ./subdir1/subdir2/subdir3/file
.
Как бы я сделал это лучше всего в Python 3?
В настоящее время я использую os.walk
обработать все файлы до бесконечной глубины в петле, как это:
for root, dirnames, filenames in os.walk(args.directory):
for filename in filenames:
path = os.path.join(root, filename)
# do something with that file...
я мог придумать способ подсчета разделителей каталогов (/
) в root
для определения текущего файла иерархических уровень и break
цикл, если этот уровень превышает желаемый максимум.
Я рассматриваю этот подход как возможно небезопасный и, вероятно, довольно неэффективен, когда игнорируется большое количество подкаталогов. Какой был бы оптимальный подход здесь?
Это довольно длинный кусок кода для небольшой проблемы .. Я предпочел бы более компактное решение, если это возможно. И я думаю, вы имеете в виду 'for ... in walk (...):' во второй последней строке вместо 'os.walk', не так ли? –
Смешно, я просто сочинял более короткую версию :-), и вы правы насчет ошибочных 'os.' на предпоследней линии; исправлено. – Kevin
Эта короткая версия выглядит круто. Я изменил его, чтобы не возвращать каталоги (поскольку мне нужны только файлы) и сравнивать 'if maxdepth! = 0', так что 0 означает только текущий каталог, и я могу использовать отрицательные значения для перемещения всей структуры каталогов. –