我以前經常把下載的東西放在桌面或者「下載」文件夾中,使用完後再也沒管它,久而久之便變得亂七八糟,再整理的時候非常痛苦,巴不得有一個自動化的工具幫我歸類文檔。
不知道你是不是有過跟我一樣糟糕的體驗,不過,前段時間我用Python做了一個根據後綴名整理文件的工具,先來看看效果:
自動整理前:
自動整理後:
效果非常好,舒服多了
如果你想要直接下載原始碼試試看,請在公眾號後臺回復
文件自動整理
獲得原始碼下載地址。
使用
1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,請訪問這篇文章:超詳細Python安裝指南 進行安裝。
如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.
你只需要修改原始碼主程序中調用 auto_organize函數的參數即可完成對對應文件的整理,比如我想整理 C:\Users\83493\Downloads文件夾:
if __name__ =="__main__":auto_organize(r"C:\Users\83493\Downloads")
如上所示,修改代碼第61行的文件夾地址即可。修改完成後運行該腳本:
python auto_files.py
就能瞬間完成對指定文件夾的整理,極其方便。
2.原理
為了整理這些文件,我們要遍歷當前指定的文件夾:如果是文件夾則跳過,如果是文件則檢測後綴,分類到對應的文件夾中。文件夾名字及其對應的文件後綴如下:
DIRECTORIES = {"圖片": [".jpeg",".jpg",".tiff",".gif",".bmp",".png",".bpg","svg", ".heif",".psd"], "視頻": [".avi",".flv",".wmv",".mov",".mp4",".webm",".vob",".mng", ".qt",".mpg",".mpeg",".3gp",".mkv"], "文檔": [".oxps",".epub",".pages",".docx",".doc",".fdf",".ods", ".odt",".pwi",".xsn",".xps",".dotx",".docm",".dox", ".rvg",".rtf",".rtfd",".wpd",".xls",".xlsx",".ppt", "pptx",".csv",",pdf"], "壓縮文件": [".a",".ar",".cpio",".iso",".tar",".gz",".rz",".7z", ".dmg",".rar",".xar",".zip"], "影音": [".aac",".aa",".aac",".dvf",".m4a",".m4b",".m4p",".mp3", ".msv","ogg","oga",".raw",".vox",".wav",".wma"], "文本": [".txt",".in",".out"], "編程": [".py",".html5",".html",".htm",".xhtml",".c",".cpp",".java",".css"], "可執行程序": [".exe"],}
接下來是自動整理的部分代碼,先遍歷指定的文件夾,識別後綴並分類到對應的文件夾中。
for entryin os.scandir(dirval):if entry.is_dir(): # 如果是文件夾則跳過 continue file_path = Path(dirval +"\\" + entry.name) file_format = file_path.suffix.lower() # 避免後綴大小寫判斷問題,全轉為小寫 if file_formatin FILE_FORMATS: directory_path = Path(dirval +"\\" + FILE_FORMATS[file_format]) directory_path.mkdir(exist_ok=True) file_path.rename(directory_path.joinpath(entry.name))
還有出現不存在在我們字典裡的後綴的情況,把它們分類到名為 其他文件 的文件夾中:
try:os.mkdir(dirval +"\\" +"其他文件")except: passfor dirin os.scandir(dirval): try: if dir.is_dir(): # 刪除空文件夾 os.rmdir(dir) else: temp = str(Path(dir)).split('\\') # 分割文件路徑 path ='\\'.join(temp[:-1]) print(path +'\\其他文件\\' + str(temp[-1])) os.rename(str(Path(dir)), path +'\\其他文件\\' + str(temp[-1])) except: pass
最後再把以上這些部分整理成函數進行調用即可。