【Python】导入资源管理器的文件列表(计算文件和文件夹大小)
文章目錄
- 1.按照擴展名進行分類
- 2.導出文件的大小
- 3.計算文件夾大小
- 4.分類到字典
- 5.完整代碼及效果
1.按照擴展名進行分類
使用Python查詢一個路徑下的所有文件可以借助glob模塊以及os模塊。
在導入文件列表之前,我們需要指定我們的操作目錄,操作目錄一經指定,在后續(xù)的函數中默認查找路徑即為當前設定的值。
注意:
- 區(qū)分文件(file)和文件夾(folder),二者沒有交集。
- 完整路徑名=路徑(path)+文件名(filename)
- 文件名=短文件名(shortname)+拓展名(extension)
以下簡單介紹幾個函數的功能:
在本例中,我們需要加載的模塊就是兩個:
2.導出文件的大小
os.stat(file).st_size可以導出file文件的大小(單位是B),其中file必須是文件名(短文件名+拓展名)組成的字符串,由于之前已經制定了操作目錄,所以不需要列出完整路徑。但是僅能顯示B的大小是不易識別的,我們可以寫一個函數來將文件大小級別分為B,KB,MB,GB,TB幾個檔次,每一個級別的系數都小于1024。編寫函數如下:
def size_variable(file_size):# 將文件大小轉換為可視化數據if file_size<2**10:return str(file_size)+"B" # <1KB用單位B表示elif file_size<2**20:return format(file_size/(2**10),".2f")+"KB" # >1KB且<1MB用單位KB表示elif file_size<2**30:return format(file_size/(2**20),".2f")+"MB" # >1MB且<1GB用單位MB表示elif file_size<2**40:return format(file_size/(2**30),".2f")+"GB" # >1GB且<1TB用單位GB表示else:return format(file_size/(2**40),".2f")+"TB" # >1TB直接用TB表示3.計算文件夾大小
計算文件夾大小和計算文件大小有所區(qū)別,在這里我們可以給定一個函數計算文件夾目錄下的所有文件,再依次打開每個文件夾,按照同樣的函數遞歸求和,最終得出文件夾所包含的文件總和。這么做固然可以,但缺點也很明顯——第一,作為遞歸算法,當文件夾層數較多但是文件數目不大時,該代碼運行效率低;第二,該代碼需要在函數內部加入遞歸環(huán)節(jié),書寫復雜。
因此,在此提供一種簡單的方法計算文件夾的大小,即調用第一部分的函數7——glob("**",recursive=True)導出所有的路徑。這是一個很方便的做法,我們可以將路徑更新至我們需要計算的文件夾下,再調用此方法。同時利用列表解析,篩選出有拓展名的路徑(即真正是文件的路徑path,因為只有文件具有大小),最后把他們的大小加起來,即得到我們需要的文件夾大小,書寫函數如下:
4.分類到字典
如果說要顯示一個文件列表的話,按照擴展名分類到字典是最不錯的選擇,將文件拓展名保存至一個集合(或列表),將文件名保存到一個列表,再將文件夾保存到一個列表,最后運用字典解析構造字典(每一個鍵對應的值都是一個列表,對于每一個文件,以該文件的拓展名為鍵,將其短文件名添加到該鍵對應的值(一個列表)中)。
在這個示例中需要同時導出文件和文件夾,那么os.listdir()即是最好的選擇。然而情況并沒有這么簡單——文件夾和文件是需要作區(qū)分的,這個區(qū)分在于文件夾沒有extension(文件拓展名)屬性,利用此方法將文件夾單獨分離出來,單獨構成一鍵添加到字典。
5.完整代碼及效果
當前目錄為:
輸出效果如下:
我們隨便打開幾個文件夾查看一下大小:
我們標定的是2.15MB
我們標定的是1.57MB
我們標定的是486B
可以看出,文件夾的大小和資源管理器標出的略有差異,但是差異較小,另外需注意這個文件大小和實際占用大小的區(qū)別,一般情況下由于存儲空間不能100%利用,實際占用大小都會略大于文件大小。
通過修改Current_dir可以得到不同目錄下的文件列表。可以看出文本文檔中的文件目錄和資源管理器中的一致。
最后值得一提的是本代碼的幫助文檔,按照此格式書寫的幫助(放在所有代碼開頭):
假若在調試器中(Python Console或者Shell IDLE)調用help函數,也可以很方便地得到該模塊信息,以下為在Shell中的場景:
>>> import File_Directory 當前操作目錄為:C:\Users\ouni\AppData\Local\Programs\Python\Python36 >>> print(File_Directory.__doc__) 文件系統(tǒng)查看器 查看該系統(tǒng)目錄下的文件并分類顯示 該文件查看器具有顯示文件大小及其文件夾大小的功能 >>> help(File_Directory) Help on module File_Directory:NAMEFile_DirectoryDESCRIPTION文件系統(tǒng)查看器查看該系統(tǒng)目錄下的文件并分類顯示該文件查看器具有顯示文件大小及其文件夾大小的功能FUNCTIONSfolder_size(folder)print_dict(dict1)size_variable(file_size)write_dict(dict1, file1)DATACurrent_dir = r'C:\Users\ouni\AppData\Local\Programs\Python\Python36'Ext = '.dll'File_Dict = {'.dll': ['python3(57.15KB)', 'python36(3.44MB)', 'vcrunti...File_Ext = ['.dll', '.exe', '.txt', '.pth', '.py', 'Folders']Files = ['LICENSE.txt', 'NEWS.txt', 'PIL.pth', 'python.exe', 'python3....Folders = ['DLLs(11.10MB)', 'Doc(7.65MB)', 'exercises(644B)', 'include...Folders_and_Files = ['DLLs', 'Doc', 'exercises', 'include', 'Lib', 'li...Initial_dir = r'C:\Users\ouni\桌面\辦公\編程\Python 3.6\Python3入門教程\文件系統(tǒng)'__copyright__ = 'Copyright (c) 2019 ouni'__license__ = 'Python3.6.5'a_file = <_io.TextIOWrapper name='Python36_File_Dir.txt' mode='w' enco...file = 'vcruntime140.dll'VERSIONV1.1DATE$Date:2019/2/25AUTHORouniFILEc:\users\ouni\桌面\辦公\編程\python 3.6\python3入門教程\文件系統(tǒng)\file_directory.py 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【Python】导入资源管理器的文件列表(计算文件和文件夹大小)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 2012资源
- 下一篇: 使用SQL Server作业设置定时任务