Это может помочь вам начать с более простого решения, которое использует вложенный словарь для представления ваших файлов вместо списков:
dir = {}
start = rootdir.rfind('/')+1
for path, dirs, files in os.walk(rootdir):
folders = path[start:].split('/')
subdir = dict.fromkeys(files)
parent = reduce(dict.get, folders[:-1], dir)
parent[folders[-1]] = subdir
Вот пример того, как dir
может выглядеть дляструктура, аналогичная приведенной в вашем примере:
{
"root": {
"folder2": {
"item2": None,
"item3": None,
"item1": None
},
"folder1": {
"subfolder1": {
"item2": None,
"item1": None
},
"subfolder2": {
"item3": None,
"item4": None
}
}
}
}
Используя это, не должно быть слишком сложно написать рекурсивную функцию, которая принимает словарь и возвращает список html.Вот простая функция, которая просто печатает элементы на правильном уровне, вы можете изменить это, добавив HTML-код:
def html_list(nested_dict, indent=0):
result = ''
if nested_dict is not None:
for item in sorted(nested_dict.keys()):
result += ' '*indent + item + '\n'
result += html_list(nested_dict[item], indent+4)
return result
>>> print html_list(dir)
root
folder1
subfolder1
item1
item2
subfolder2
item3
item4
folder2
item1
item2
item3