有效地从os.walk中删除目录名中的子目录
问题内容:
在python 2.7中的Mac上,使用os.walk浏览目录时,我的脚本会通过“
apps”即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
正在使用的同一列表,而不是创建新列表。
请注意,您的原始代码不正确,因为您在迭代列表时修改了列表,这是不允许的。