詳解如何使用Python實(shí)現(xiàn)刪除重復(fù)文件
Python自動(dòng)化辦公之刪除重復(fù)文件
思路介紹
兩層判斷:
1.先判斷文件大小是否為相同,大小不同則不是重復(fù)文件,予以保留;
2.文件大小相同再判斷文件md5,md5相同,則是重復(fù)文件,予以刪除。
源碼解說
from pathlib import Path import hashlib def getmd5(filename): # 接收文件路徑,返回文件md5值 with open(filename, 'rb') as f: data = f.read() file_md5 = hashlib.new("md5", data).hexdigest() return file_md5 def main(): path = r"F:\FileRecv\刪除文件測試" all_size = {} total_file = 0 total_delete = 0 # 獲取路徑內(nèi)的所有文件名,默認(rèn)是升序排列,相同文件將會(huì)保留日期時(shí)間最新的 all_files = Path(path).glob('*.*') # 降序排列,相同文件將會(huì)保留文件名最短的(即日期時(shí)間最久的) all_files = sorted(all_files, reverse=True) # 遍歷文件路徑內(nèi)的所有文件 for file in all_files: # 獲取文件所占字節(jié)大小,作為數(shù)據(jù)字典的鍵 size = file.stat().st_size # name_and_md5列表用于存儲(chǔ)文件絕對(duì)路徑和md5值,作為數(shù)據(jù)字典的值 name_and_md5 = [file, ''] # 針對(duì)重復(fù)文件進(jìn)行處理,生成字典存儲(chǔ)相關(guān)信息 # 字典all_size中key是size,value是name_and_md5列表 # 針對(duì)相同size的文件,再調(diào)用getmd5函數(shù),獲取文件的md5值 # 文件size不同(不在all_size.keys()中),則自動(dòng)判斷為不同的文件,予以保留 if size in all_size.keys(): # 調(diào)用getmd5函數(shù),獲取文件的md5值 new_md5 = getmd5(file) if all_size[size][1] == '': all_size[size][1] = getmd5(all_size[size][0]) # 判斷md5值存在,即文件重復(fù),則刪除文件。md5值不存在,則把md5值加入列表中 if new_md5 in all_size[size]: file.unlink() total_delete += 1 else: all_size[size].append(new_md5) else: all_size[size] = name_and_md5 total_file += 1 print(f'文件總數(shù):{total_file}') print(f'刪除個(gè)數(shù):{total_delete}') if __name__ == '__main__': main()
效果圖:
代碼說明:特別感謝瑜亮老師提供的代碼!
知識(shí)拓展
pathlib和os,os.path常用的函數(shù)對(duì)應(yīng)關(guān)系
pathlib常用方法介紹:
Path(path).name # 返回文件名+文件后綴
Path(path).stem # 返回文件名
Path(path).suffix # 返回文件后綴
Path(path).suffixes # 返回文件后綴列表
Path(path).root # 返回根目錄
Path(path).parts # 返回文件
Path(path).anchor # 返回根目錄
Path(path).parent # 返回父級(jí)目錄
Path(path).parents # 返回所有上級(jí)目錄的列表
Path.exists() # 判斷 Path 路徑是否是一個(gè)已存在的文件或文件夾
Path.is_dir() # 判斷 Path 是否是一個(gè)文件夾
Path.is_file() # 判斷 Path 是否是一個(gè)文件
Path.mkdir() # 創(chuàng)建文件夾
Path.rmdir() # 刪除文件夾,文件夾必須為空
Path.unlink() # 刪除文件
到此這篇關(guān)于詳解如何使用Python實(shí)現(xiàn)刪除重復(fù)文件的文章就介紹到這了,更多相關(guān)Python刪除重復(fù)文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch讀取圖像數(shù)據(jù)轉(zhuǎn)成opencv格式實(shí)例
這篇文章主要介紹了pytorch讀取圖像數(shù)據(jù)轉(zhuǎn)成opencv格式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06使用Python第三方庫xlrd讀取Excel中的數(shù)據(jù)的流程步驟
這篇文章主要給大家介紹了使用Python第三方庫xlrd讀取Excel中的數(shù)據(jù)的流程步驟,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12python 動(dòng)態(tài)遷移solr數(shù)據(jù)過程解析
這篇文章主要介紹了python 動(dòng)態(tài)遷移solr數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09python控制臺(tái)打印log輸出重復(fù)的解決方法
在學(xué)習(xí)了python的函數(shù)式編程后,又接觸到了logging這樣一個(gè)強(qiáng)大的日志模塊。這篇文章主要給大家介紹了關(guān)于python控制臺(tái)打印log輸出重復(fù)的解決方法,需要的朋友可以參考下2021-05-05Tensorflow 定義變量,函數(shù),數(shù)值計(jì)算等名字的更新方式
今天小編就為大家分享一篇Tensorflow 定義變量,函數(shù),數(shù)值計(jì)算等名字的更新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02