使用os.walk()[Python]忽略某些子目录

时间:2014-04-10 21:36:51

标签: python os.walk

我目前有以下功能:

def create_image_list(directory):

    extensions = ('.jpg', 'jpeg', '.png', '.bmp')
    file_list = []

    for root, directories, files in os.walk(directory):
        for filename in files:
            if filename.endswith(extensions):
                filepath = os.path.join(root, filename)
                file_list.append(filepath)

它遍历给定目录中的每个文件和子目录,并将完整路径放入列表中具有给定扩展名的任何文件。但是,我想忽略某些子目录,例如标记为thumbs的子目录。我该怎么做?

1 个答案:

答案 0 :(得分:3)

您可以在directories循环内过滤for对象。引用docs

  

当topdown为True时,调用者可以就地修改dirnames列表   (可能使用del或slice赋值),而walk()只会递归   进入名称保留在dirnames中的子目录;这可以   用来修剪搜索,强加一个特定的访问顺序,甚至   通知walk()有关调用者创建或重命名的目录   在它再次恢复步行()之前。

类似

for root, directories, files in os.walk(directory):
    directories[:] = [d for d in directories if d not in ['thumbs']]
    for filename in files:
        if filename.endswith(extensions):
            filepath = os.path.join(root, filename)
            file_list.append(filepath)

要忽略其他目录,您可以将其名称添加到['thumbs']列表中。