Python 停止os.walk在特定目录名处继续向下移动
如果路径同时包含“release”和“armlinux”,我需要阻止os.walk继续往下走。我在不同级别的目录中有一堆这样的文件。所以我不能简单地规定等级。到目前为止,我有以下内容,它不必要地跳过了“arm linux”中的目录Python 停止os.walk在特定目录名处继续向下移动,python,Python,如果路径同时包含“release”和“armlinux”,我需要阻止os.walk继续往下走。我在不同级别的目录中有一堆这样的文件。所以我不能简单地规定等级。到目前为止,我有以下内容,它不必要地跳过了“arm linux”中的目录 def main(argv): for root, dirs, files in os.walk("."): path = root.split(os.sep) if "release"
def main(argv):
for root, dirs, files in os.walk("."):
path = root.split(os.sep)
if "release" and "arm-linux" in path:
print(os.path.abspath(root))
getSharedLib(argv)
这是我的解决方案
def main(argv):
for root, dirs, files in os.walk("."):
path = root.split(os.sep)
if "release" in path and "arm-linux" in path:
print(os.path.abspath(root))
getSharedLib(argv)
del dirs[:]
从
当topdown为True时,调用者可以就地修改dirnames列表(可能使用del
或slice赋值),并且walk()
将只递归到名称保留在dirnames中的子目录中
请注意,自上而下默认为True
编辑 要删除
dirs
的所有元素,您需要类似于deldirs[:]
的内容。这将删除列表对象中的所有元素,这些元素在代码中称为dirs
,但在os.walk
代码中被另一个名称引用
仅使用
del dirs
将停止代码中的dirs
引用列表,但不会对os.walk
引用执行任何操作。类似地,dirs=[]
将替换代码中所引用的dirs
,但不会影响os.walk
代码。顺便说一句,path中的“release”和“arm linux”并没有做您认为它做的事情。它被解析为(“release”)和(“arm linux”在路径中))
,您需要在路径中“release”和在路径中“arm linux”
当您的条件满足时,从目录中删除所有项目。我肯定需要更多的节目…太棒了。我只需要del dirs[:]。为什么del dirs[:]
做了这项工作,而del dirs
没有做?@dafnahaktana我在一篇解释中编辑了这篇文章。如果这还不够清楚,我建议你问一个单独的问题。