統計一個目錄下各類檔案數量
阿新 • • 發佈:2019-01-11
最近筆者在研究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。