У меня есть несколько каталогов dirs = [dir1, dir2, ...]
Объединить выход множественного os.walk работает
Эти каталоги структурированы следующим образом:
dir1
subdir1
folder1
file1
file2
subdir2
dir2
subdir1
folder2
file3
file4
subdir2
Обратите внимание, что имена подкаталогов являются одинаковыми. Оба dir1 и dir2 имеют одинаковые именованные подкаталоги. Что мне нужно, чтобы напечатать таблицу HTML, которая объединяет файлы и папки из dir1 и dir2, как так:
subdir1
folder1
folder2
file3
file1
file2
file4
subdir2
Еще один нюанс в том, что мне нужно знать путь каждого файла и папки, так что я могу ссылку на него.
До сих пор я создаю дерево для dir1 с помощью os.walk
и создаю таблицу html из этой строки, каждая строка которой находится в списке. Затем я делаю os.walk
для всех других серверов, и для каждого каталога перейдите в этот список, пока базовое имя не станет таким же, а затем вставьте файлы и папки. Но это очень медленно. Я уверен, что есть очень умное пятилинейное решение, которое достигнет того же.
def get_table(self, teams=['test1', 'test2']):
paths = []
table = []
for team in teams:
paths.append(config.basepath + '/' + team)
for path in paths:
if not table:
for root, dirs, files in os.walk(path):
dirs = sorted(dirs)
files = sorted(files)
team = self.get_team(path) # extracts the 'dir' from path
level = root.replace(path, '').count(os.sep)
indent = ' ' * 4 * (level)
subindent = ' ' * 4 * (level + 1)
table.append('{0}<tr class="{2}"><td>{1}</td><td>{2}</td></tr>'.format(indent, os.path.basename(root), team))
for f in files:
table.append('{0}<tr class="{2}"><td>{1}</td><td>{2}</td></tr>'.format(subindent, f, team))
else:
for root, dirs, files in os.walk(path):
dirs = sorted(dirs)
files = sorted(files)
team = self.get_team(path)
level = root.replace(path, '').count(os.sep)
indent = ' ' * 4 * (level)
subindent = ' ' * 4 * (level + 1)
for idx, line in enumerate(table):
if os.path.basename(root) in line:
for f in files:
table.insert(idx+1, '{0}<tr class="{2}"><td>{1}</td><td>{2}</td></tr>'.format(subindent, f, team))
Я думаю, что вы accidentaly выложили функцию процесса дважды, без функции отображения. – mzhaase