有没有办法降低递归删除Python中文件的复杂度?
Is there way to reduce the complexity of recursively deleting files in Python?
我有一个解决方案,可以删除给定目录中的文件并保留父目录的第一代子目录,同时删除其余目录。
例如,给定这个结构:
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)
? (已经有一段时间了)
不,这是线性的 -- O(N) -- 关于结构中 files + directories
的数量。您对这些元素中的每一个都处理一次。
嵌套循环和顺序循环只是您用来准确到达每个循环一次的机制。
我有一个解决方案,可以删除给定目录中的文件并保留父目录的第一代子目录,同时删除其余目录。
例如,给定这个结构:
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)
? (已经有一段时间了)
不,这是线性的 -- O(N) -- 关于结构中 files + directories
的数量。您对这些元素中的每一个都处理一次。
嵌套循环和顺序循环只是您用来准确到达每个循环一次的机制。