Python:计算特定命名子目录中的文件

时间:2016-04-14 17:07:44

标签: python subdirectory os.walk

我试图进行nagios检查以计算任何子目录名称中的文件数量"失败"在给定目录下,然后检查max_files阈值。这有点像在bash中做for i in `find . -type d -name failed`; do echo $; ls |wc -l $i; done之类的事情。 (试图学习更多的Python,而不是回到bash。是的,这个命令可能不像写的那样工作,只是出于说明的原因而发布。)

我拼凑了这个方法,它实际上做了我想要的,但我似乎无法摆脱它产生的所有冗余输出。我试过重新订购for循环,但无济于事。所以我显然错过了一些非常简单的东西。

import os, fnmatch

def count_files_in_subd():
   for root, dirs, files in os.walk("."):
       print "{} in {}".format(len(files), root)
       for dirname in fnmatch.filter(dirs, 'failed'):
           print "{} in {}".format(len(files), root)

count_files_in_subd()

在我开始将文件计数与阈值进行比较之前,这就是所有这些,但我仍然坚持这一部分并且似乎无法摆脱继续所需的思维。

1 个答案:

答案 0 :(得分:0)

from os import listdir

def count_files_in_subd(path):
    files = listdir(path)

    if 'failed' in files:
        failed_files = listdir(path + 'failed/')
    else:
        print("There is no failed directory.")
        return

    print("There are {} files in the directory {}".format(len(failed_files), path))

listdir(path)返回路径中所有文件的列表。使用listdir(path)获取len()的长度将返回列表中的对象数。

或者,这对夫妇简化为:

print("{}:    {}".format(path + 'failed/', len(listdir(path)))