Python OS 檔案/目錄方法
首先介紹用到的幾個函數,寫了一個小demo方便理解。
os.getcwd()
回到目前路徑。
os.listdir (path)
返回目前路徑下的資料夾與檔案(不向下二級遞歸)。
os.path.join()
join() 方法用於將序列中的元素以指定的字元連接產生一個新的字串。
os.path 讓join()辨識為路徑,依照系統自動補齊'\' '/'。
os.path.getsize(path) 回傳檔案大小
# -*- encoding: utf-8 -*_ import os path = os.getcwd() # 获取当前路径 for dirs in os.listdir(path): print dirs file_name = "路径补齐.txt" path = os.path.join(path,file_name) print path size = os.path.getsize("E:\PythonEclipse\PythonStudy\os.listdir\listdirs.py") print size
輸出結果:
A B C file.txt listdirs.py E:\PythonEclipse\PythonStudy\os.listdir\路径补齐.txtA 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,則透過軟連結存取目錄。
# -*- encoding: utf-8 -*_ import os for root, dirs, filename in os.walk(os.getcwd()): print root print dirs print filename
輸出結果:
#E:\PythonEclipse\PythonStudy\os.listdir ['A', 'B', 'C'] ['file.txt', 'listdirs.py'] E:\PythonEclipse\PythonStudy\os.listdir\A [] [] E:\PythonEclipse\PythonStudy\os.listdir\B [] ['file.txt'] E:\PythonEclipse\PythonStudy\os.listdir\C [] []
功能實作想法:
需要取得資料夾的大小,只要遍歷文件下所有的文件,取得所有文件大小求和即可。
這裡是實作的是目前目錄下,資料夾大小不包括目前檔案下檔案大小。
python的編碼的格式,需要注意。
# -*- encoding: utf-8 -*- import os rootdir = os.getcwd() #获取当前路径 rootdir = rootdir.decode('gbk') x = u'统计文件大小.csv' f = open(os.path.join(rootdir,x), "w+") for dirname in os.listdir(rootdir): #获取二级目录所有文件夹与文件 Dir = os.path.join(rootdir, dirname) #路径补齐 count = 0 if (os.path.isdir(Dir)): #判断是否为目录 for r, ds, files in os.walk(Dir): #遍历目录下所有文件根,目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名称】 for file in files: #遍历所有文件 size = os.path.getsize(os.path.join(r, file)) #获取文件大小 count += size if ((count/1024.0/1024.0) < 1024): print Dir +'\t' + '%.2f'% (count/1024.0/1024.0)+'MB' f.write(Dir.encode("gbk") +','+ '%.2f'% (count/1024.0/1024.0)+'MB' + '\n') else: print Dir + '\t' + '%.2f' % (count / 1024.0 / 1024.0/1024.0) + 'GB' f.write(Dir.encode("gbk") + ',' + '%.2f' % (count / 1024.0 / 1024.0/1024.0) + 'GB' + '\n') else: continue f.close()
更多Pyhon 取得資料夾的大小統計相關文章請關注PHP中文網!
#