我有一个解决方案,可以删除给定目录中的文件,并保留父目录的第一代子目录,同时删除其余目录。
例如,给定以下结构:
parent
-- child_dir
---- grandchild_dir
运行该函数后,grandchild_dir
的所有内容均被删除,但child_dir
保持不变。我的问题是我正在使用的函数具有很高的复杂度,我想降低这种复杂度。
这是为了清除由于文件系统限制而需要保持第一代子目录完整的缓存的Tomcat 8文件。缓存清除是在Tomcat服务器启动之前(即处于停止状态时)进行的。恐怕如果删除它们并尝试重新创建它们,则将没有正确的权限。我已经使用ServerSpec测试了该功能,它确实可以按预期运行,但是如果要清除的文件很多,它恐怕会花费太多时间在启动服务器时投入很多精力。
def _clean_directories(path):
for root, tmp_dirs, tmp_files in os.walk(path):
for name in tmp_files:
os.remove(os.path.join(root, name))
for name in tmp_dirs:
if (os.path.join(root, name).count('/') > (path.count('/') + 1)):
shutil.rmtree(os.path.join(root, name))
它按预期方式工作,我只是不喜欢嵌套的for
。
P.S。复杂度是O(2n^2)
吗? (已经有一段时间了)
答案 0 :(得分:1)
否,这是线性的- O(N)-结构中files + directories
的数量。您每个处理一次这些元素。
嵌套循环和顺序循环仅仅是您一次精确地到达每个循环的机制。