使用Python计算和打印子文件夹中的文件数

时间:2014-10-30 11:24:14

标签: python file count numbers

我的文件夹结构如下
文件夹A
    文件夹B1
    文件夹B2
    ....
    文件夹Bn

如何计算每个文件夹(文件夹B1 - 文件夹Bn)中的文件数,检查文件数是否大于给定限制,并在屏幕上打印文件夹名称和文件数?

像这样:
文件太多的文件夹:
文件夹B3 101
文件夹B7 256

这是我到目前为止所尝试的内容。它遍历我的每个文件夹B1等中的每个子文件夹。我只需要一个级别的文件计数。

import os, sys ,csv
path = '/Folder A/'

outwriter = csv.writer(open("numFiles.csv", 'w')

dir_count = []

for root, dirs, files in os.walk(path):
    for d in dirs:
        a = str(d)
        count = 0
        for fi in files:
            count += 1
        y = (a, count)
        dir_count.append(y)

    for i in dir_count:
        outwriter.writerow(i)

然后我打印了numFiles.csv。我不太喜欢这样做。 提前谢谢!

2 个答案:

答案 0 :(得分:5)

由于这些都包含在该单个文件夹中,您只需要搜索该目录:

import os
path = '/Folder A/'
mn = 20
folders = ([name for name in os.listdir(path)
            if os.path.isdir(os.path.join(path, name)) and name.startswith("B")]) # get all directories 
for folder in folders:
    contents = os.listdir(os.path.join(path,folder)) # get list of contents
    if len(contents) > mn: # if greater than the limit, print folder and number of contents
        print(folder,len(contents)

答案 1 :(得分:-1)

os.walk(path)为您提供了三个目录元组,即(directory,subdirectory,files)。 目录 - >当前目录中所有目录的列表,当前目录中的子目录列表,当前目录中的文件列表。
所以你可以编码喜欢这个:

import os
for dir,subdir,files in os.walk(path):
    if len(files) > your_limit:
        print dir + " has crossed limit, " + "total files: " + len(files)
        for x in files:
            print x

如果你只想走一个级别,你需要像这样编码:

for x in os.listdir(path):
    if os.path.isdir(x):
        count = len([ y for y in os.listdir(x) if os.path.isfile(os.path.join(x,y)) ])
        if count > your_limit:
            print x + " has crossed limit: ", +count