停止os.walk在特定目录名称下进一步下降

Ada*_*Lee 2 python

如果路径包含"release"和"arm-linux",我需要阻止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)
Run Code Online (Sandbox Code Playgroud)

[ 更新 ]这是我的解决方案

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[:]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ica 6

文档中

topdown为True时,调用者可以就地修改dirnames列表(可能使用del或切片赋值),并且walk()只会递归到名称保留在dirnames中的子目录中;

请注意,默认情况下topdown为True.


编辑

要删除所有元素dirs,您需要类似的东西del dirs[:].这将删除dirs代码中引用的列表对象的所有元素,但在代码中由另一个名称引用os.walk.

只是使用del dirs将停止dirs在您的代码中引用列表,但不会对os.walk引用做任何事情.同样dirs = []会替换dirs代码中引用的内容,但不会影响os.walk代码.

  • 精彩的。我只需要 del dirs[:]。泰。 (2认同)