詳解Python如何通過(guò)文件后綴整理文件夾
此前用Python實(shí)現(xiàn)了根據(jù)文件后綴整理文件夾的方法,見(jiàn)此文:Python根據(jù)文件后綴整理文件夾。但這篇博客并沒(méi)有進(jìn)行良好的封裝,下面仍以文件夾整理為目的,用類來(lái)重新實(shí)現(xiàn)次功能。
文件夾類型字典
根據(jù)熵增原理,我們的文件夾在經(jīng)過(guò)一段時(shí)間之后會(huì)變得混亂不堪,尤其是桌面和下載文件夾,找個(gè)東西會(huì)十分費(fèi)勁,特別影響效率,所以用Python做一個(gè)文件夾整理小工具還是很有必要的。
而最常見(jiàn)的整理方法,就是按照文件類型,為了實(shí)現(xiàn)這個(gè)目標(biāo),可以先做一個(gè)文件類型字典,來(lái)綁定文件類型和后綴。
為此,可創(chuàng)建一個(gè)類
class FileSystem: def __init__(self, root) -> None: self.fileDct = FILE_DCT
其中FILE_DCT是默認(rèn)的文件字典,
# 封裝在 FILE_DCT = { "圖片" : [".jpg", ".png", ".jpeg", ".gif"], "視頻" : [".mp4", ".mkv"], "音樂(lè)" : [".mp3", ".wav"], "文檔" : [".pdf"], "文本" : [".csv", ".txt"], "源碼" : [".py", ".c", ".cpp", ".php"], "office": [".docx",".xlsx", ".pptx", ".doc", ".ppt", ".xls"], "壓縮包": [".zip", ".tgz", ".rar", ".tar", ".7z"], "安裝包": [".msi", ".exe"], }
而文件整理的邏輯是,先創(chuàng)建圖片、視頻等文件夾,然后通過(guò)文件的后綴找到其對(duì)應(yīng)的文件類別,然后移動(dòng)到相應(yīng)的文件夾。為了更加便捷地實(shí)現(xiàn)這個(gè)功能,做一個(gè)反向的字典,用以通過(guò)后綴返回文件夾
# FileSystem的成員方法,復(fù)制時(shí)注意縮進(jìn) def setExDct(self): self.exDct = {} for key in self.fileDct: self.exDct.update({ex:key for ex in self.fileDct[key]})
考慮到更新字典的可能性,創(chuàng)建update方法。
def update(self, dct): self.fileDct = dct self.setExDct()
移動(dòng)文件
接下來(lái)就是移動(dòng)文件,這里面有兩個(gè)問(wèn)題,一是目標(biāo)文件夾不存在,則需要新建;二則是目標(biāo)文件夾中已經(jīng)有了同名文件,那么則需要報(bào)錯(cuò)
import os import shutil pJoin = os.path.join pExist = os.path.exists # 此為FileSystem的成員方法 def mvFile(self, src, dst): if not pExist(dst): os.makedirs(dst) try: shutil.move(src, dst) return True except Exception as e: print(e) return False
主流程
接下來(lái)就是整個(gè)文件夾整理的主流程
from pathlib import Path # FileSystem的成員方法,復(fù)制時(shí)注意縮進(jìn) # tar是準(zhǔn)備整理的文件夾 def sortFiles(self, tar): files = os.listdir(tar) fsErr = [] self.history = [] for f in files: src = pJoin(tar, f) print(src) ex = Path(src).suffix.lower() if ex not in self.exDct: continue dst = pJoin(tar, self.exDct[ex]) if self.mvFile(src, dst): self.history.append([src, dst]) else: fsErr.append(src) self.setErrInfo(fsErr) # 設(shè)置錯(cuò)誤信息 def setErrInfo(self, fsErr): SUCCESS = "全部文件移動(dòng)成功" ERROR = "以下文件移動(dòng)失?。篭r\n" if len(fsErr) == 0: self.errInfo = SUCCESS else: self.errInfo = ERROR + "\r\n".join(fsErr)
其中,self.history用于存儲(chǔ)復(fù)制結(jié)果,如果感覺(jué)整理邏輯不對(duì),想要恢復(fù)整理之前的樣子,則可動(dòng)用history中的列表。
# FileSystem的成員方法,復(fù)制時(shí)注意縮進(jìn) def restore(self): fsErr = [] for src, dst in self.history: if not self.mvFile(dst, src): fsErr.append(dst) self.setErrInfo(fsErr)
最后,為FileSystem這個(gè)類添加一個(gè)靜態(tài)方法,從而可以快速調(diào)用
@staticmethod def sort(tar, fileDct=None): fs = FileSystem() if fileDct: fs.update(fileDct) fs.sortFiles(tar)
整理結(jié)果如下
到此這篇關(guān)于詳解Python如何通過(guò)文件后綴整理文件夾的文章就介紹到這了,更多相關(guān)Python整理文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python基本算法之實(shí)現(xiàn)歸并排序(Merge sort)
這篇文章主要給大家介紹了關(guān)于python基本算法之實(shí)現(xiàn)歸并排序(Merge sort)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python深度學(xué)習(xí)實(shí)戰(zhàn)PyQt5菜單和工具欄功能作用
本文詳細(xì)解讀通過(guò) QtDesigner 創(chuàng)建主窗口、菜單欄和工具欄,并以菜單項(xiàng) “退出” 為例關(guān)聯(lián)系統(tǒng)定義的動(dòng)作處理方法。有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10Python3獲取電腦IP、主機(jī)名、Mac地址的方法示例
這篇文章主要介紹了Python3獲取電腦IP、主機(jī)名、Mac地址的方法,結(jié)合具體實(shí)例形式分析了Python3基于socket與uuid模塊針對(duì)電腦的IP、主機(jī)名、Mac地址等信息的讀取操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-04-04Python讀取JSON數(shù)據(jù)操作實(shí)例解析
這篇文章主要介紹了Python讀取JSON數(shù)據(jù)操作實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05對(duì)python numpy.array插入一行或一列的方法詳解
今天小編就為大家分享一篇對(duì)python numpy.array插入一行或一列的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01pyqt5中QThread在使用時(shí)出現(xiàn)重復(fù)emit的實(shí)例
今天小編就為大家分享一篇pyqt5中QThread在使用時(shí)出現(xiàn)重復(fù)emit的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06