詳解如何使用Python實(shí)現(xiàn)刪除重復(fù)文件
Python自動化辦公之刪除重復(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)是升序排列,相同文件將會保留日期時間最新的
all_files = Path(path).glob('*.*')
# 降序排列,相同文件將會保留文件名最短的(即日期時間最久的)
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列表用于存儲文件絕對路徑和md5值,作為數(shù)據(jù)字典的值
name_and_md5 = [file, '']
# 針對重復(fù)文件進(jìn)行處理,生成字典存儲相關(guān)信息
# 字典all_size中key是size,value是name_and_md5列表
# 針對相同size的文件,再調(diào)用getmd5函數(shù),獲取文件的md5值
# 文件size不同(不在all_size.keys()中),則自動判斷為不同的文件,予以保留
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'刪除個數(shù):{total_delete}')
if __name__ == '__main__':
main()效果圖:

代碼說明:特別感謝瑜亮老師提供的代碼!
知識拓展
pathlib和os,os.path常用的函數(shù)對應(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 # 返回父級目錄
Path(path).parents # 返回所有上級目錄的列表
Path.exists() # 判斷 Path 路徑是否是一個已存在的文件或文件夾
Path.is_dir() # 判斷 Path 是否是一個文件夾
Path.is_file() # 判斷 Path 是否是一個文件
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)文章
pyinstaller打包可執(zhí)行文件,存放路徑包含中文無法運(yùn)行的解決方案
這篇文章主要介紹了pyinstaller打包可執(zhí)行文件,存放路徑包含中文無法運(yùn)行的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
PyTorch與PyTorch?Geometric的安裝過程
這篇文章主要介紹了PyTorch與PyTorch?Geometric的安裝,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
django 實(shí)現(xiàn)手動存儲文件到model的FileField
這篇文章主要介紹了django 實(shí)現(xiàn)手動存儲文件到model的FileField,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
python實(shí)現(xiàn)數(shù)字炸彈游戲程序
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)數(shù)字炸彈游戲程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07
python 時間的訪問和轉(zhuǎn)換 time示例小結(jié)
Python 的 time 模塊提供了各種與時間處理相關(guān)的功能,包括獲取當(dāng)前時間、操作日期/時間以及執(zhí)行與時間相關(guān)的各種其它功能,這篇文章主要介紹了python 時間的訪問和轉(zhuǎn)換 time,需要的朋友可以參考下2024-05-05
Django restframework 源碼分析之認(rèn)證詳解
這篇文章主要介紹了Django-restframework 源碼分析之認(rèn)證詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
解決pytorch中的kl divergence計(jì)算問題
這篇文章主要介紹了解決pytorch中的kl divergence計(jì)算問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05

