在 python 2.7 的 mac 上,当使用 os.walk 遍历目录时,我的脚本通过“应用程序”,即 appname.app,因为它们实际上只是目录本身。好吧,在处理过程中,我在处理它们时遇到了错误。无论如何,我不想通过它们,所以为了我的目的,最好忽略那些类型的“目录”。
所以这是我目前的解决方案:
for root, subdirs, files in os.walk(directory, True):
for subdir in subdirs:
if '.' in subdir:
subdirs.remove(subdir)
#do more stuff
如您所见,第二个 for 循环将针对子目录的每次迭代运行,这是不必要的,因为第一个循环删除了我想删除的所有内容。
必须有更有效的方法来做到这一点。有什么想法吗?
最佳答案
你可以这样做(假设你想忽略包含'.'的目录):
subdirs[:] = [d for d in subdirs if '.' not in d]
切片分配(而不仅仅是 subdirs = ...
)是必要的,因为您需要修改 os.walk
正在使用的相同列表,而不是创建一个新的。
请注意,您的原始代码不正确,因为您在迭代列表时修改了列表,这是不允许的。
关于python - 从 os.walk 中有效地删除 dirnames 中的子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10620737/