3 回答
TA贡献1775条经验 获得超11个赞
dirs 就地修改将修剪(后续)访问过的文件和目录os.walk:
# exclude = set([...])
for root, dirs, files in os.walk(top, topdown=True):
dirs[:] = [d for d in dirs if d not in exclude]
从帮助(os.walk):
当topdown为true时,调用者可以就地修改目录名列表(例如,通过del或slice分配),而walk仅会递归到名称仍保留在目录名中的子目录;这可以用来修剪搜索...
TA贡献2051条经验 获得超10个赞
... @ unutbu的出色答案的另一种形式,它的读入更为直接,因为其目的是排除目录,所花费的时间为O(n ** 2)vs O(n)。
(list(dirs)为了正确执行,需要复制dirs列表)
# exclude = set([...])
for root, dirs, files in os.walk(top, topdown=True):
[dirs.remove(d) for d in list(dirs) if d in exclude]
TA贡献1850条经验 获得超11个赞
就地dirs[:] = value修改。它在不更改容器的情况下更改列表的内容。如前所述,如果您希望影响遍历子目录的方式,则需要这样做。(仅将变量重新分配(或“绑定”)到新列表,而无需修改原始列表。)dirs dirshelp(os.walk)os.walkdirs = valuedirsdirs
添加回答
举报
