Python中os.walk跳过特定名称的目录而不是路径

4

我有一个文件系统,希望能够使用Python进行检查和更新。我的解决方案是使用os.walk,但它无法满足我的需求和文件系统的要求。目录布局如下:

Root
dir1
    subdir
        1
        2
        3...
    file1
    file2
dir2
    subdir
        1
        2
        3...
    file1
    file2
...

主目录的名称不同,因此为“dir1”和“dir2”,但是这些目录中的子目录具有相同的名称并包含许多不同的文件和目录。子目录是我想要从os.walk中排除的,因为它们会增加不必要的计算。
是否存在一种基于目录名称而不是路径来从os.walk中排除目录的方法,或者我需要做其他事情?
1个回答

11

os.walk 允许您修改给您的目录列表。如果您将某些目录删除,则它不会进入这些目录。

for dirpath, dirnames, filenames in os.walk("/root/path"):
    if "subdir" in dirnames:
        dirnames.remove("subdir")
    # process the files here

(请注意,如果您使用自下而上的扫描方式,则此方法无效。自上而下的扫描方式是默认方式。)
查看文档

感谢您在for循环内遵守命名约定,因为这样很有意义。我创建了一个类似的基于路径的过滤器:https://dev59.com/XW435IYBdhLWcg3w6EmF#51871627 - JayRizzo
如果你想跳过所有子文件夹,你可以使用 clear()(例如:if len(filenames)>0: dirnames.clear())。请注意,如果你给 dirnames 赋值,例如 dirnames = [],这将无效,因为解释器将创建另一个临时变量,并将其忽略。 - Nir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接