首先,
“非常高的性能”和“Python”不太搭配。如果您要优化性能到极致,转换为C将带来比您想到的任何智能代码优化更好的效果。
其次,
很难相信在一个“文件管理/分析工具包”中瓶颈会是这个函数。磁盘上的I/O操作至少比内存中发生的任何事情慢几个数量级。对代码进行分析是唯一准确的方法,但是……如果我错了,我愿意请你吃披萨!;)
我编写了一个简单的测试函数来进行一些初步的测量:
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秒钟内您可以处理大约100万个文件的树。现在...除非您在Google工作,否则我认为这是一个可接受的结果。
相比之下,当我开始撰写这篇答案时,我点击了我的主80GB硬盘根目录上的“属性”选项[使用C代码应该给我它上面的文件数量]。几分钟过去了,我已经到了50 GB左右,300000个文件...
希望对你有所帮助! :)