通過Python 實現文件夾大小的統計:主要是通過了 import os 中的幾個方法來實現。
--Zero
首先介紹用到的幾個函數,寫了一個小demo便於理解。
os.getcwd()
返回當前路徑。
os.listdir (path)
返回當前路徑下的文件夾與文件(不向下二級遞歸)。
os.path.join()
join() 方法用於將序列中的元素以指定的字符連接生成一個新的字符串。
os.path 讓join()識別為路徑,根據系統自動補齊'\' '/'。
os.path.getsize(path) 返回文件大小
1 # -*- encoding: utf-8 -*_ 2 import os 3 4 path = os.getcwd() # 獲取當前路徑 5 for dirs in os.listdir(path): 6 print dirs 7 8 file_name = "路徑補齊.txt" 9 path = os.path.join(path,file_name) 10 print path 11 size = os.path.getsize("E:\PythonEclipse\PythonStudy\os.listdir\listdirs.py") 12 print size
輸出結果:
1 A 2 B 3 C 4 file.txt 5 listdirs.py 6 E:\PythonEclipse\PythonStudy\os.listdir\路徑補齊.txtA
7 303
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
top -- 根目錄下的每一個文件夾(包含它自己), 產生3-元組 (dirpath, dirnames, filenames)【文件夾路徑, 文件夾名字, 文件名】。
topdown --可選,為True或者沒有指定, 一個目錄的的3-元組將比它的任何子文件夾的3-元組先產生 (目錄自上而下)。如果topdown為 False, 一個目錄的3-元組將比它的任何子文件夾的3-元組后產生 (目錄自下而上)。
onerror -- 可選,是一個函數; 它調用時有一個參數, 一個OSError實例。報告這錯誤后,繼續walk,或者拋出exception終止walk。
followlinks -- 設置為 true,則通過軟鏈接訪問目錄。
1 # -*- encoding: utf-8 -*_ 2 import os 3 4 for root, dirs, filename in os.walk(os.getcwd()): 5 print root 6 print dirs 7 print filename
輸出結果:
1 E:\PythonEclipse\PythonStudy\os.listdir 2 ['A', 'B', 'C'] 3 ['file.txt', 'listdirs.py'] 4 E:\PythonEclipse\PythonStudy\os.listdir\A 5 [] 6 [] 7 E:\PythonEclipse\PythonStudy\os.listdir\B 8 [] 9 ['file.txt'] 10 E:\PythonEclipse\PythonStudy\os.listdir\C 11 [] 12 []
功能實現思路:
需要獲取文件夾的大小,只要遍歷文件下所有的文件,獲取所有文件大小求和即可。
這里是實現的是當前目錄下,文件夾大小不包括當前文件下文件大小。
python的編碼的格式,需要注意。
1 # -*- encoding: utf-8 -*- 2 import os 3 rootdir = os.getcwd() #獲取當前路徑 4 5 rootdir = rootdir.decode('gbk') 6 x = u'統計文件大小.csv' 7 f = open(os.path.join(rootdir,x), "w+") 8 for dirname in os.listdir(rootdir): #獲取二級目錄所有文件夾與文件 9 Dir = os.path.join(rootdir, dirname) #路徑補齊 10 count = 0 11 if (os.path.isdir(Dir)): #判斷是否為目錄 12 for r, ds, files in os.walk(Dir): #遍歷目錄下所有文件根,目錄下的每一個文件夾(包含它自己), 產生3-元組 (dirpath, dirnames, filenames)【文件夾路徑, 文件夾名字, 文件名稱】 13 for file in files: #遍歷所有文件 14 size = os.path.getsize(os.path.join(r, file)) #獲取文件大小 15 count += size 16 if ((count/1024.0/1024.0) < 1024): 17 print Dir +'\t' + '%.2f'% (count/1024.0/1024.0)+'MB' 18 f.write(Dir.encode("gbk") +','+ '%.2f'% (count/1024.0/1024.0)+'MB' + '\n') 19 else: 20 print Dir + '\t' + '%.2f' % (count / 1024.0 / 1024.0/1024.0) + 'GB' 21 f.write(Dir.encode("gbk") + ',' + '%.2f' % (count / 1024.0 / 1024.0/1024.0) + 'GB' + '\n') 22 else: 23 continue 24 f.close()