Как пройти каталог в винде обходом в глубину?

Как пройти каталог обходом в глубину? Дальше второго уровня не проходит. Проблема в том что при рекурсии возникает неправильный путь к папкам. Подскажите в каком направлении думать.

import os


PATH = 'D:\\projects\\portfolio'


def list_is_direct(name_path):
    visit = []  # список посещенных папок
    list_item = os.listdir(name_path)  # получаем список папок и файлов в указанной директории

    for item in list_item:
        try:
            if os.path.isdir(name_path + '\\' + item):
                if not item is visit:
                    items = os.listdir(name_path + '\\' + item)  # заходим в каждую папку
                    print(name_path + '\\' + item)
                    visit.append(item)
                    for i in items:
                        if os.path.isdir(name_path + '\\' + i):
                            print('\t' + name_path + '\\' + i)
                            list_is_direct(name_path + '\\' + item)
                        else:
                            print('\t' + i)
        except PermissionError:  # обработка исключения прав доступа
            continue


list_is_direct(PATH)

Хочу сделать вывод в консоли вот такого вида:

папка1
---папка1
---папка2
   ---папка1
   ---папка2
      ---папка1
---папка3
папка2

Ответы (1 шт):

Автор решения: MBo

Дерево каталогов есть дерево, а не произвольный граф (если не учитывать symbolic links) и обходить его несложно:

import os

PATH = 'E:\\Downloads'

def list_is_direct(name_path, level = 0):
    print('\t'*level + name_path)

    list_item = os.listdir(name_path)  # получаем список папок и файлов в указанной директории

    for item in list_item:
        try:
            if os.path.isdir(name_path + '\\' + item):
                list_is_direct(name_path + '\\' + item, level + 1)
        except PermissionError:  # обработка исключения прав доступа
            continue

list_is_direct(PATH)
→ Ссылка