python實(shí)現(xiàn)自動(dòng)整理文件
前言:
平時(shí)工作沒(méi)有養(yǎng)成分類(lèi)的習(xí)慣,整個(gè)桌面雜亂無(wú)章都是文檔和資料,幾乎快占滿(mǎn)整個(gè)屏幕了。所以必須要整理一下了,今天我們來(lái)看下用python如何批量將不同后綴的文件移動(dòng)到同一文件夾。
演示效果:
- 使用前
- 使用后
代碼:
# # -*- coding:utf-8 -*- import os import glob import shutil import tkinter import tkinter.filedialog from datetime import datetime def start(): ? ? root = tkinter.Tk() ? ? root.withdraw() ? ? dirname = tkinter.filedialog.askdirectory(parent=root,initialdir="/",title='請(qǐng)選擇文件夾') ? ? return dirname # 定義一個(gè)文件字典,不同的文件類(lèi)型,屬于不同的文件夾 file_dict = { ? ? "圖片": ["jpeg", "jpg", "tiff", "gif", "bmp", "png", "bpg", "svg", "heif", "psd"], ? ? "視頻": ["avi", "flv", "wmv", "mov", "mp4", "webm", "vob", "mng", "qt", "mpg", "mpeg", "3gp", "mkv"], ? ? "音頻": ["aac", "aa", "aac", "dvf", "m4a", "m4b", "m4p", "mp3", "msv", "ogg", "oga", "raw", "vox", "wav", "wma"], ? ? "文檔": ["oxps", "epub", "pages", "docx", "doc", "fdf", "ods", "odt", "pwi", "xsn", "xps", "dotx", "docm", "dox", "rvg", "rtf", "rtfd", "wpd", "xls", "xlsx","xlsm","ppt", "pptx", "csv", "pdf", "md","xmind"], ? ? "壓縮文件": ["a", "ar", "cpio", "iso", "tar", "gz", "rz", "7z", "dmg", "rar", "xar", "zip"], ? ? "文本": ["txt", "in", "out","json","xml","log"], ? ? "程序腳本": ["py", "html5", "html", "htm", "xhtml", "cpp", "java", "css","sql"],? ? ? '可執(zhí)行程序': ['exe', 'bat', 'lnk', 'sys', 'com','apk'], ? ? '字體文件': ['eot', 'otf', 'fon', 'font', 'ttf', 'ttc', 'woff', 'woff2','shx'], ? ? '工程圖文件':['bak','dwg','dxf','dwl','dwl2','stp','SLDPRT','ipj','ipt','idw'] } # 定義一個(gè)函數(shù),傳入每個(gè)文件對(duì)應(yīng)的后綴。判斷文件是否存在于字典file_dict中; # 如果存在,返回對(duì)應(yīng)的文件夾名;如果不存在,將該文件夾命名為"未知分類(lèi)"; def JudgeFile(suffix): ? ? for name, type_list in file_dict.items(): ? ? ? ? if suffix.lower() in type_list: ? ? ? ? ? ? return name ? ? return "未知分類(lèi)" if __name__ == '__main__': ? ? try: ? ? ? ? while True: ? ? ? ? ? ? path = start() ? ? ? ? ? ? print("---->路徑是: ",path) ? ? ? ? ? ? if path == "": ? ? ? ? ? ? ? ? print("沒(méi)有選擇路徑!") ? ? ? ? ? ? ? ? break ? ? ? ? ? ? # 遞歸獲取 "待處理文件路徑" 下的所有文件和文件夾。 ? ? ? ? ? ? startTime = datetime.now().second ? ? ? ? ? ? for file in glob.glob(f"{path}/**/*", recursive=True): ? ? ? ? ? ? ? ? # 由于我們是對(duì)文件分類(lèi),這里需要挑選出文件來(lái)。 ? ? ? ? ? ? ? ? if os.path.isfile(file): ? ? ? ? ? ? ? ? ? ? # 由于isfile()函數(shù),獲取的是每個(gè)文件的全路徑。這里再調(diào)用basename()函數(shù),直接獲取文件名; ? ? ? ? ? ? ? ? ? ? file_name = os.path.basename(file) ? ? ? ? ? ? ? ? ? ? suffix = file_name.split(".")[-1] ? ? ? ? ? ? ? ? ? ? # 判斷 "文件名" 是否在字典中。 ? ? ? ? ? ? ? ? ? ? name = JudgeFile(suffix) ? ? ? ? ? ? ? ? ? ? # 根據(jù)每個(gè)文件分類(lèi),創(chuàng)建各自對(duì)應(yīng)的文件夾。 ? ? ? ? ? ? ? ? ? ? if not os.path.exists(f"{path}\\{name}"): ? ? ? ? ? ? ? ? ? ? ? ? os.mkdir(f"{path}\\{name}") ? ? ? ? ? ? ? ? ? ? ? ? print('path-->',name) ? ? ? ? ? ? ? ? ? ? # 將文件復(fù)制到各自對(duì)應(yīng)的文件夾中。 ? ? ? ? ? ? ? ? ? ? # shutil.copy(file, f"{path}\\{name}") ? ? ? ? ? ? ? ? ? ? # 將文件移動(dòng)到各自對(duì)應(yīng)的文件夾中。 ? ? ? ? ? ? ? ? ? ? shutil.move(file, f"{path}\\{name}") ? ? ? ? ? ? endTime = datetime.now().second ? ? ? ? ? ? countTime= endTime-startTime ? ? ? ? ? ? print("---->已經(jīng)整理完成。共花費(fèi) {} s".format(countTime)) ? ? ? ? ? ? a = input('---->請(qǐng)按回車(chē)鍵退出:') ? ? ? ? ? ? if a == '': ? ? ? ? ? ? ? ? break ? ? except BaseException: ? ? ? ? print('存在重復(fù)的文件!')
執(zhí)行起來(lái)很簡(jiǎn)單,只要寫(xiě)完程序,點(diǎn)擊程運(yùn)行,等待彈出窗口,選擇需要整理的文件夾即可。
如果覺(jué)得以上代碼覺(jué)得復(fù)雜,可以嘗試以下更為簡(jiǎn)單的程序。
如何實(shí)現(xiàn)文件自動(dòng)分類(lèi)?
同一目錄下存在很多不同類(lèi)型的資源條件
- 1 .分類(lèi)
- 2.創(chuàng)建分類(lèi)目錄
- 3.移動(dòng)文件資源
import os import shutil import tkinter import tkinter.filedialog from datetime import datetime def start(): ? ? root = tkinter.Tk() ? ? root.withdraw() ? ? dirname = tkinter.filedialog.askdirectory(parent=root,initialdir="/",title='請(qǐng)選擇文件夾') ? ? return dirname # 源文件存在路徑 src_dir=start() # 分類(lèi)資源存在路徑 dest_dir=src_dir # 判斷目錄是否存在 if not os.path.exists(dest_dir): ? ? os.mkdir(dest_dir) # 源目錄分析 files=os.listdir(src_dir) for item in files: ? ? src_path=os.path.join(src_dir,item) ? ? # 判斷狀態(tài) ? ? if os.path.isfile(src_path): ? ? ? ? #如果是文件,進(jìn)入代碼塊 ? ? ? ? # 判斷文件資源的類(lèi)型 ? ? ? ? ndir = item.split('.')[-1] ? ? ? ? desc_path=os.path.join(dest_dir,ndir) ? ? ? ? # 創(chuàng)建分類(lèi)目錄 ? ? ? ? if not os.path.exists(desc_path): ? ? ? ? ? ? # 如果分類(lèi)子目錄不存在,創(chuàng)建 ? ? ? ? ? ? os.mkdir(desc_path) ? ? ? ? shutil.move(src_path,desc_path)
到此這篇關(guān)于python實(shí)現(xiàn)自動(dòng)整理文件的文章就介紹到這了,更多相關(guān)python整理文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas重復(fù)行刪除操作df.drop_duplicates和df.duplicated的區(qū)別
本文主要介紹了pandas重復(fù)行刪除操作df.drop_duplicates和df.duplicated的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08如何使用Python基于接口編程的方法實(shí)現(xiàn)
本文主要介紹了如何使用Python基于接口編程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape)
今天小編就為大家分享一篇python實(shí)現(xiàn)將一維列表轉(zhuǎn)換為多維列表(numpy+reshape),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11基于python 二維數(shù)組及畫(huà)圖的實(shí)例詳解
下面小編就為大家分享一篇基于python 二維數(shù)組及畫(huà)圖的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04使用 Django 進(jìn)行測(cè)試驅(qū)動(dòng)開(kāi)發(fā)
本文分享了什么是測(cè)試驅(qū)動(dòng)開(kāi)發(fā),并用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的方式 創(chuàng)建了一個(gè)簡(jiǎn)單的 Django 應(yīng)用程序,感興趣的可以了解一下2021-11-11