詳解如何使用Python實現(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)的所有文件名,默認是升序排列,相同文件將會保留日期時間最新的
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ù)文件進行處理,生成字典存儲相關(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實現(xiàn)刪除重復(fù)文件的文章就介紹到這了,更多相關(guān)Python刪除重復(fù)文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch讀取圖像數(shù)據(jù)轉(zhuǎn)成opencv格式實例
這篇文章主要介紹了pytorch讀取圖像數(shù)據(jù)轉(zhuǎn)成opencv格式實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
使用Python第三方庫xlrd讀取Excel中的數(shù)據(jù)的流程步驟
這篇文章主要給大家介紹了使用Python第三方庫xlrd讀取Excel中的數(shù)據(jù)的流程步驟,文中通過代碼示例給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12
python 動態(tài)遷移solr數(shù)據(jù)過程解析
這篇文章主要介紹了python 動態(tài)遷移solr數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09
Tensorflow 定義變量,函數(shù),數(shù)值計算等名字的更新方式
今天小編就為大家分享一篇Tensorflow 定義變量,函數(shù),數(shù)值計算等名字的更新方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02

