我有一个类似下面示例的目录,其中包含以下文件夹:
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)))))
较短的格式,但不太可读;) “map”遍历os.walk的结果,如果以“QGIS”结尾,则返回文件夹名称,否则返回无。 “过滤器”返回映射结果中与值None不同的每个值。 需要“list”,因为map和filter都返回一个迭代器对象,该对象没有长度,但“list”有长度
list.count
方法不支持任何通配符的概念,它只查找与作为参数给定的值相等的元素数。那你的台词呢正在查找字面上称为
*QGIS
的目录,而不是以QGIS
结尾的目录这里的修复应该很容易,因为代码已经成功地打印出了正确的路径;只是没有正确地计算它们。因此,您所需要做的就是删除上面的语句,而只需在打印每个路径的位置添加1,这在循环目录名中已经受到正确的
if
条件的约束您已经在循环开始之前正确初始化了
i=0
最后,只需执行以下操作:
并且去掉涉及
sum
的表达式,在该表达式中,您将再次遍历所有目录相关问题 更多 >
编程相关推荐