Python實現(xiàn)清理重復(fù)文件功能的示例代碼
在電腦上或多或少的存在一些重復(fù)文件,體積小的倒沒什么,如果體積大的就很占內(nèi)存了,而如果自己一個一個查看文件是否重復(fù),然后再刪除,還是很要命的。
為此,我用python制作了一個刪除重復(fù)文件的小工具,核心代碼很簡單,就十行代碼,不管什么類型的文件都可以一鍵刪除!
前置
PySimpleGUI庫用來創(chuàng)建可視化界面,os操作文件,只需要這兩個庫:
import?os import?PySimpleGUI?as?sg
os為內(nèi)置庫,PySimpleGUI使用pip命令安裝即可:
pip?install?庫名
查找、刪除重復(fù)文件
查找重復(fù)文件分為兩步:
第一步是獲得需要查找的文件路徑;
第二步是各個文件進行對比出重復(fù)文件。
這里用os.walk()遍歷文件夾下的所有文件,該函數(shù)可以得到一個三元元組(root,dirs,files),參數(shù)含義如下:
- root:所指的是當前正在遍歷的這個文件夾的本身的地址;
- dirs:是一個 list ,內(nèi)容是該文件夾中所有的目錄的名字(不包括子目錄);
- files:同樣是 list , 內(nèi)容是該文件夾中所有的文件(不包括子目錄)。
file_path即walk()函數(shù)中的參數(shù)top,是你所要遍歷的目錄的路徑,C、D盤或者指定文件夾均可:
?for?root,?dirs,?files?in?os.walk(file_path): ?????for?file?in?files: ??????#?組合得到文件夾所有文件的路徑 ?????????path?=?os.path.join(root,?file)
得到所有的文件路徑后,對其進行讀取,不同的文件格式讀取出來的內(nèi)容都是不同的,然后通過字典映射的方式存儲讀取的內(nèi)容和路徑,接著只需要進行判斷是否有重復(fù)的內(nèi)容,有的話根據(jù)路徑用os.remove()進行刪除:
dict?=?{} f?=?open(path,?'rb').read() if?f?in?dict: ?????#?刪除 ?????os.remove(path) ?????print('刪除重復(fù)文件:',?path) ?else: ?????dict[f]?=?path
以上就是核心代碼,一共十行。
GUI制作
為了以后方便使用,不用一次次跑程序,而在原有的程序基礎(chǔ)上進行GUI制作,最后打包成.exe可執(zhí)行文件。
GUI界面設(shè)計
界面我只做了個簡單的基礎(chǔ)版本,相關(guān)內(nèi)容可以看千圖成像,有興趣的還可以加入“選擇需要刪除文件格式”的選項,進行選擇性刪除。
#?主題設(shè)置 sg.theme('LightBrown3')?? #?布局設(shè)置 layout?=?[ ????[sg.Frame(layout=[ ????????[sg.InputText(key='file_path',?size=(41,?1),?font=("微軟雅黑",?10),?enable_events=True), ?????????sg.FolderBrowse('選擇文件夾', ???????????????????????font=("微軟雅黑",?12)), ?????????], ????], ????????title='文件夾選擇',?title_color='blue',?font=("微軟雅黑",?10),?relief=sg.RELIEF_SUNKEN,?)], ????[sg.Frame(layout=[ ????????[sg.Output(size=(51,?10),?font=("微軟雅黑",?10))], ????], ????????title='信息展示',?title_color='blue',?font=("微軟雅黑",?10),?relief=sg.RELIEF_SUNKEN,?)], ????[sg.Button('開始刪除',?font=("微軟雅黑",?12)), ?????sg.Text('',?font=("微軟雅黑",?12),?size=(27,?0)),?sg.Button('退出程序',?font=("微軟雅黑",?12),?button_color='red')] ] #?創(chuàng)建窗口 window?=?sg.Window('刪除重復(fù)文件',?layout,?font=("微軟雅黑",?12),?default_element_size=(80,?1)) filepath?=?[] #?事件循環(huán) while?True: ????#?退出按鈕 ????event,?values?=?window.read() ????if?event?in?(None,?'退出程序'): ????????break window.close()
界面效果如下:
GUI界面效果
邏輯設(shè)計
獲取文件夾路徑,把得到的路徑存入列表中:
?if?event?==?'file_path': ????files?=?values['file_path'] ????if?os.path.exists(files): ????????filepath.append(files) ????else: ????????print('文件夾不存在,請重新選擇!') ????????sg.popup('文件夾不存在,請重新選擇!')
啟動按鈕,點擊時把路徑列表傳入main函數(shù)中:
if?event?==?'開始刪除': ????if?len(filepath)?!=?0: ????????main(filepath) ????else: ????????sg.popup('文件夾未選擇!')
GUI打包
打包可以直接使用pyinstaller進行安裝;如果你不知道怎么打包,或者不熟悉命令行操作,可以使用前面文章:打包工具,這款打包工具可以簡單的滿足打包需求。
使用pyinstaller庫打包,啟動命令行窗口,在命令行窗口cd到文件所在的文件目錄中,最后用下面命令進行打包:
pyinstaller?-F?-w?名稱.py
打包過程沒出現(xiàn)什么狀況,會得到幾個文件,進入dist文件夾,就可以看見.exe文件了。
效果展示
示例結(jié)果
至此,我們就成功利用Python實現(xiàn)了清理重復(fù)文件工具。
到此這篇關(guān)于Python實現(xiàn)清理重復(fù)文件功能的示例代碼的文章就介紹到這了,更多相關(guān)Python清理重復(fù)文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解MySQL數(shù)據(jù)類型int(M)中M的含義
int(M)拆分來說,int是代表整型數(shù)據(jù)那,么中間的M應(yīng)該是代表多少位了,后來查mysql手冊也得知了我的理解是正確的,下面這篇文章小編就來舉例詳細說明。 文中介紹的很詳細,相信對大家的理解和學(xué)習很有幫助,有需要的朋友們下面就來學(xué)習學(xué)習吧。2016-11-11python 使用cycle構(gòu)造無限循環(huán)迭代器
這篇文章主要介紹了python 使用cycle構(gòu)造無限循環(huán)迭代器的方法,幫助大家更好的理解和學(xué)習python,感興趣的朋友可以了解下2020-12-1210種檢測Python程序運行時間、CPU和內(nèi)存占用的方法
這篇文章主要介紹了10種檢測Python程序運行時間、CPU和內(nèi)存占用的方法,包括利用Python裝飾器或是外部的Unix Shell命令等,需要的朋友可以參考下2015-04-04Python操作Excel神器openpyxl使用教程(超詳細!)
openpyxl庫是一個很好處理xlsx的python庫,下面這篇文章主要給大家介紹了關(guān)于Python辦公自動化openpyxl使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-01-01