分别查找每个文件夹中的子目录数

时间:2015-02-12 12:34:20

标签: python

我有一个文件夹,其中包含一定数量的文件夹,并且它们都包含文件夹中的文件夹,我想检查每个文件夹中的子目录数。我尝试使用os.walk并在每次遇到文件夹时添加+1。但是这会返回所有目录的子目录计数,我希望它们分别用于每个文件夹。

例如,假设我有文件夹A1和A2。

A1: subfolder1 -(contains)-> subfolder2 
A2: subfolder1 -(contains)-> subfolder2 -(contains)-> subfolder3 -(contains)-> subfolder4

现在我的代码返回6而不是2和4。

def count_folders(path):
    count=0
    for dir in os.listdir(path):
        nDir = os.path.join(path,dir)
        if os.path.isdir(nDir):
           for dirs in os.walk(nDir):
               if os.path.isdir(dirs[0]):
                  count+=1
    print count

3 个答案:

答案 0 :(得分:0)

我在这里试试时效果很好:

def count_folders(path):
    count = 0
    for root, dirs, files in os.walk(pth):
        count += len(dirs)
    return count

要了解其工作原理,请尝试打印" root"," dirs"和"文件"一个接一个。

Documentation

A short tutorial

答案 1 :(得分:0)

也许您可以注释掉这三行,这可能会阻止count变量计算“子文件夹的子文件夹”的数量。

import os
def count_folders(path):
    count=0
    for dir in os.listdir(path):
        nDir = os.path.join(path,dir)
        if os.path.isdir(nDir):
            count+=1
#            for dirs in os.walk(nDir):
#                if os.path.isdir(dirs[0]):
#                   count+=1
    print count

答案 2 :(得分:0)

如果您要查找path中每个子目录内的子目录数,可以尝试此功能:

def count_folders(path):
    count={}
    for dir in os.listdir(path):
        nDir = os.path.join(path,dir)
        if os.path.isdir(nDir):
           c = 0
           for d in os.listdir(nDir):
               if os.path.isdir(os.path.join(nDir, d)):
                  c+=1
           count[nDir] = c
    print count

它返回一个字典,其中包含每个子路径内的子目录数。