1. 程式人生 > >統計一個目錄下各類檔案數量

統計一個目錄下各類檔案數量

最近筆者在研究tomcat底層架構,肯定要扒一扒tomcat原始碼,筆者希望知道工作量有多大,也就是統計一下tomcat原始碼中檔案有多少。筆者首先是個比較懶得人(不懶也不會幹IT),所以不可能手動的去統計,也不會自己寫程式碼去統計,然後在網上找了一個java版本的程式碼。

java程式碼如下:

package statistic;

import java.io.File;

public class Test {
	static int count=0;
	public static void main(String[] args) {
        getFile("D:/eclipse/work/apache-tomcat-6.0.35-src"
); System.out.println("共有"+count+"個檔案"); } public static void getFile(String filepath) { //com.bizwink.cms.util.Convert con = new com.bizwink.cms.util.Convert(); File file = new File(filepath); File[] listfile = file.listFiles(); for (int i = 0; i < listfile.
length; i++) { //System.out.println("****** = "+listfile[i].getPath().toString()); if (!listfile[i].isDirectory()) { //com.bizwink.cms.util.Convert con = new com.bizwink.cms.util.Convert(); String temp=listfile[i].toString().substring(7,listfile[i]
.toString().length()) ; //System.out.println("temp=="+temp); //con.convertFile(listfile[i].toString(), "D:\\newtest"+temp, 0, 3); count++; //System.out.println("檔案"+count+"---path=" + listfile[i]); } else { getFile(listfile[i].toString()); } } } }

執行結果如下:
這裡寫圖片描述

總體來講,此程式碼中規中矩,統計倒是很準確,但是tomcat原始碼中有各類的檔案,筆者希望統計資訊更詳細一點,加上筆者最近在學習python,在加上突然想到該案例是一個非常好的遞迴案例,然後筆者一時技癢,自己寫了幾行程式碼:

python程式碼如下:

#_*_ coding:utf-8 _*_

'''
Created on 2018年9月15日

@author: admin
'''

import os.path

rootFolder = 'D:/eclipse/work/apache-tomcat-6.0.35-src'

#字尾名字典表
result = {'folder':0}

def statistic(folder):
    for temp in os.listdir(folder):
        filepath = os.path.join(folder,temp)
        
        #判斷是否資料夾,如果是資料夾,則繼續遞迴遍歷
        if (os.path.isdir( filepath )):
            result['folder'] += 1
            statistic(filepath)
        else:
            (name, extension)= os.path.splitext(temp)
            #判斷後綴名是否在後綴名字典表中
            #如果有,直接將該字尾名檔案數加1
            if result.has_key(extension):
                result[extension] += 1
            #如果沒有,則新增新的字典專案,該字尾名檔案數置位1
            else:
                result[extension] = 1
                
if __name__ == '__main__':
    statistic( rootFolder )
    sum = 0
    for name in result.keys():
        if( name == '' ):
            print('該資料夾下共有型別為【無後綴名】的檔案%s個'%(result[name]))
        else:
            print('該資料夾下共有型別為【%s】的檔案%s個'%(name, result[name]))
        sum += result[name]
    print("共有目錄及檔案%s個"%sum)

執行結果如下:
這裡寫圖片描述

注意:上面程式碼第21行程式碼是一個坑,因為開始筆者寫的是os.path.isdir( temp ),會一直報錯,因為isdir()函式裡面傳入的引數是一個絕對路徑,不然一直會返回false。