以递归方式爬行目录并计算给定文件夹出现的次数?

时间:2014-06-02 21:58:41

标签: python recursion

尝试使用python递归遍历文件夹,

for item in os.listdir(path):
    print('in ' + os.path.join(path,item))
    if item.upper() == dname.upper():
        print('FOUND')
        next = os.path.join(path,item)
        return 1 + countDir(dname,next)
    else:
        try:
            next = os.path.join(path,item)
            countDir(dname,next)
        except:
            return 0

它在for循环中的第一个项目处停止,并且我试图弄清楚为什么会破坏我的大脑。

我明白了

countDir('dir1','testThree')
in testThree\dir1
FOUND
in testThree\dir1\Dir1
FOUND
in testThree\dir1\Dir1\dirA
in testThree\dir1\Dir1\dirA\file.txt
in testThree\dir1\Dir1\prog.py
2

但是在dir1之后还有2个目录应该进入。 其中包含2个以上的Dir1'所以我应该返回4而不是2。

1 个答案:

答案 0 :(得分:0)

count = 0

for root, dirs, files in os.walk(path):
    for name in files:
        if  name.upper() == dname.upper():
           count += 1

return count

<强>更新

您缺少关键逻辑。除非目录条目对应于子目录,否则不要递归。这是一个适合我的版本。

def countDir(dname, path):
   count = 0
   for item in os.listdir(path):
       if item.upper() == dname.upper():
           count += 1
       else:
           next = os.path.join(path,item)
           if os.path.isdir(next):
              try:
                  count += countDir(dname,next)
              except:
                  return count
   return count