返回目录和子目录中的文件夹数

2024-03-29 06:48:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似下面示例的目录,其中包含以下文件夹:

C:\Users\xx\Desktop\New folder\New folder\New folder\QGIS
C:\Users\xx\Desktop\New folder\New folder\New folder (2)\1- QGIS
C:\Users\xx\Desktop\New folder\New folder\New folder (4)\1.0 QGIS
C:\Users\xx\Desktop\New folder\New folder\QGIS

我想知道有多少文件夹的名称以QGIS和路径结尾

下面是我当前的脚本。它成功地为我提供了所有文件夹的路径,名称以QGIS结尾,但脚本仅统计名称为“QGIS”的文件夹,不计算“1.0 QGIS”或“1-QGIS”。我错过了什么

import os

rootfolder = r'C:\Users\xx\Desktop\New folder'

isfile = os.path.isfile
join = os.path.join

i=0

with open("folderpath.txt", 'w') as f:

    for root, dirs, files in os.walk(rootfolder, topdown=False):
        i+= dirs.count('*QGIS')
        for name in dirs:
            if name.endswith("QGIS"):
                f.write(os.path.join(root, name)+'\n')

    f.write(str((sum(dirs.count('QGIS') for _, dirs, _ in os.walk(rootfolder)))))

0条回答
网友
1楼 · 发布于 2024-03-29 06:48:55
import os

print( len( list( filter(None, map(lambda x: x[0] if x[0].endswith('QGIS') else None,os.walk('.'))))))

较短的格式,但不太可读;) “map”遍历os.walk的结果,如果以“QGIS”结尾,则返回文件夹名称,否则返回无。 “过滤器”返回映射结果中与值None不同的每个值。 需要“list”,因为map和filter都返回一个迭代器对象,该对象没有长度,但“list”有长度

网友
2楼 · 发布于 2024-03-29 06:48:55

list.count方法不支持任何通配符的概念,它只查找与作为参数给定的值相等的元素数。那你的台词呢

        i+= dirs.count('*QGIS')

正在查找字面上称为*QGIS的目录,而不是以QGIS结尾的目录

这里的修复应该很容易,因为代码已经成功地打印出了正确的路径;只是没有正确地计算它们。因此,您所需要做的就是删除上面的语句,而只需在打印每个路径的位置添加1,这在循环目录名中已经受到正确的if条件的约束

    for root, dirs, files in os.walk(rootfolder, topdown=False):
        for name in dirs:
            if name.endswith("QGIS"):
                f.write(os.path.join(root, name)+'\n')
                i += 1

您已经在循环开始之前正确初始化了i=0

最后,只需执行以下操作:

print(i)

并且去掉涉及sum的表达式,在该表达式中,您将再次遍历所有目录

相关问题 更多 >