Python 停止os.walk在特定目录名处继续向下移动

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"

如果路径同时包含“release”和“armlinux”,我需要阻止os.walk继续往下走。我在不同级别的目录中有一堆这样的文件。所以我不能简单地规定等级。到目前为止,我有以下内容,它不必要地跳过了“arm linux”中的目录

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我在一篇解释中编辑了这篇文章。如果这还不够清楚,我建议你问一个单独的问题。