python - 从 os.walk 中有效地删除 dirnames 中的子目录

标签 python python-2.7 os.walk

在 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/

相关文章:

python - 如何在 OpenERP 中将一个会计科目表转换为另一个?

python - 网页抓取:我只得到我想要的文本的 1/10(使用 BeautifulSoup)

permissions - virtualenv python 可执行文件的奇怪权限问题 (lubuntu-12.10)

python - 如何进行递归子文件夹搜索并返回列表中的文件?

python - 如何通过查看 python 中文件名的最后一位数字来组织文件?

python - 精神科PG2 : Querying using an external Variable In a Dash App

python - Django 多数据库连接

python - 尝试使用 os.path 通过文件搜索创建 CSV 文件

python - object是python中的一个类,但是它的第一个char没有大写

python - scipy.stats.gamma 库中的参数 a 是什么