Здравствуйте. пытаюсь реализовать обход графа в глубину на основе файловой системы, но ничего не получается.
Граф из папок

import glob
import os
import codecs
import time
node = {}
spisok = []
visited = []
def filegraph(start, last ):
if start not in visited:
spisok.clear()
names = os.listdir(start)
visited.append(start)
#print(visited)
print(start , ' Текущая директория')
#print(os.getcwd())
print(last , ' Последняя директория')
for name in names:
directory = os.path.join(start, name)
if os.path.isdir(directory) == True:
spisok.append(directory)
print(directory , 'директория')
print( spisok , ' список')
print(last)
node[start] = last , spisok #Добавляем в словарь
try:
print(node[last] , ' last' )
except KeyError:
print(' Ключа нет')
print(node[start] , ' start')
#print(node , ' node')
if len(spisok) != 0:
for a in range(0 , len(spisok)):
if node[start][1][a] not in visited:
time.sleep(3)
os.chdir(node[start][1][a])
for key in node:
print('%s -> %s' % (key , node[key]) , end = ' \n')
print(node[start][1][a] , ' start ' , '-' * 10 )
return filegraph(node[start][1][a] ,start)
else:
time.sleep(3)
print(' Возвращение ' )
print(node[start][0] , ' start 0' )
for key in node:
print('%s -> %s' % (key , node[key]) , end = ' \n')
return filegraph(node[start][0] , '')
elif start in visited:
print( visited , ' visited')
print(node)
for key in node:
print('%s -> %s' % (key , node[key]) , end = ' \n')
print(start , ' Посещено')
#print(node[u'D:\\Project\\test\\First '])
filegraph(u"D:\\Project\\test" , '' )
Что удалось достичь:
Алгоритм доходит только до конца одной ветки
Что не так:
Пытаюсь хранить вершины в словаре, но заметил что почти с самого начала словарь перезаписывается и вернутся на уровень выше благодаря словарю не получается.
D:\Project\test Текущая директория
Последняя директория
D:\Project\test\First директория
D:\Project\test\Second директория
D:\Project\test\Three директория
['D:\\Project\\test\\First', 'D:\\Project\\test\\Second', 'D:\\Project\\test\\Three'] список
Ключа нет
('', ['D:\\Project\\test\\First', 'D:\\Project\\test\\Second', 'D:\\Project\\test\\Three']) start
D:\Project\test -> ('', ['D:\\Project\\test\\First', 'D:\\Project\\test\\Second', 'D:\\Project\\test\\Three'])
D:\Project\test\First start ----------
D:\Project\test\First Текущая директория
D:\Project\test Последняя директория
D:\Project\test\First\1-2 директория
['D:\\Project\\test\\First\\1-2'] список
D:\Project\test
('', ['D:\\Project\\test\\First\\1-2']) last
('D:\\Project\\test', ['D:\\Project\\test\\First\\1-2']) start
D:\Project\test -> ('', ['D:\\Project\\test\\First\\1-2'])
D:\Project\test\First -> ('D:\\Project\\test', ['D:\\Project\\test\\First\\1-2'])
D:\Project\test\First\1-2 start ----------
Подскажите пожалуйста что можно сделать?