Во-первых, "очень высокая производительность" и "Python" плохо перемешиваются . Если то, что вы ищете, - это предельная оптимизация производительности, переход на C принесет вам гораздо больше преимуществ, чем любая интеллектуальная оптимизация кода, о которой вы могли подумать.
Во-вторых, трудно поверить, что узким местом в "инструменте управления / анализа файлов" будет эта функция . Операции ввода-вывода на диске, по крайней мере, на несколько порядков медленнее, чем все, что происходит в памяти. Профилирование вашего кода - единственный точный способ оценить это, но ... я готов заплатить вам пиццу, если я ошибаюсь! ;)
Я построил глупую тестовую функцию, чтобы выполнить предварительные измерения:
from timeit import Timer as T
PLIST = [['dir', ['file', ['dir2', ['file2']], 'file3']], ['dir3', ['file4', 'file5', 'file6', 'file7']]]
def tree(plist, indent=0):
level = []
for el in plist:
if isinstance(el, list):
level.extend(tree(el, indent + 2))
else:
level.append(' ' * indent + el)
return level
print T(lambda : tree(PLIST)).repeat(number=100000)
Это выводит:
[1.0135619640350342, 1.0107290744781494, 1.0090651512145996]
Поскольку список тестовых путей составляет 10 файлов, а число итераций равно 100000, это означает, что за 1 секунду вы можете обработать дерево из примерно 1 миллиона файлов. Теперь ... если вы не работаете в Google, это кажется мне приемлемым результатом.
В отличие от этого, когда я начал писать этот ответ, я щелкнул опцию «свойство» в корне моего основного 80-гигабайтного HD (это должно дать мне количество файлов на нем, используя C-код). Прошло несколько минут, и у меня около 50 ГБ, 300000 файлов ...
НТН! :)