Python實(shí)現(xiàn)刪除重復(fù)文件的示例代碼
此程序主要是針對(duì)某個(gè)目錄下的全部文件進(jìn)行篩選,會(huì)刪除重復(fù)的文件。
原理很簡(jiǎn)單,會(huì)計(jì)算每個(gè)文件的哈希,將哈希存入一個(gè)字典,文件名對(duì)應(yīng)哈希。
import os import hashlib def hash_file(filename): """Return the SHA-1 hash of the file content.""" h = hashlib.sha1() with open(filename, 'rb') as f: while True: chunk = f.read(4096) if not chunk: break h.update(chunk) return h.hexdigest() def remove_duplicate_files(path): """Remove duplicates files in the directory.""" files_hash = {} i=0 j=0 sum=len(os.listdir(path)) for dirpath, dirnames, filenames in os.walk(path): for filename in filenames: j=j+1 print("執(zhí)行進(jìn)度為:",100*j/sum,"%") file_path = os.path.join(dirpath, filename) file_hash = hash_file(file_path) if file_hash in files_hash: os.remove(file_path) i=i+1 # print(i) else: files_hash[file_hash] = file_path print("文件總數(shù)為:",sum) print("此處處理的重復(fù)文件數(shù)目為:",i)
在使用的時(shí)候直接調(diào)用下面那個(gè)函數(shù)即可,傳入?yún)?shù)為目錄路徑。
例如下面這樣:
remove_duplicate_files("Y:\圖片合集")
當(dāng)然,你也可以將程序打包為一個(gè)exe文件,甚至為它添加簡(jiǎn)單的頁(yè)面,讓非計(jì)算機(jī)專(zhuān)業(yè)的人也能輕易使用。
補(bǔ)充
當(dāng)然除了上文的方法,還有很多方法可以實(shí)現(xiàn),下面是小編為大家整理的內(nèi)容,希望對(duì)大家有所幫助
Python刪除文件夾內(nèi)指定的重復(fù)文件
import os import re class file_clean: def __init__(self, folder, filerege): self.folder = folder self.filerege = filerege self.folder_generator = os.walk(self.folder) # 刪除所有文件夾及子文件夾下指定文件 def del_all_file(self): for folder, subfolder, file_list in self.folder_generator: for file in file_list: if self.filerege == '*': del_all_file = os.path.join(folder, file) os.remove(del_all_file) elif re.findall(self.filerege, file): del_all_file = os.path.join(folder, file) print(del_all_file) os.remove(del_all_file) # 只刪除所有文件夾下的指定文件 def del_file(self): for folder, subfolder, file_list in self.folder_generator: if os.path.dirname(folder) == os.path.dirname(self.folder): for file in file_list: if self.filerege == '*': del_file = os.path.join(folder, file) os.remove(del_file) elif re.findall(self.filerege, file): del_file = os.path.join(folder, file) print(del_file) os.remove(del_file) if __name__ == '__main__': # 選擇文件夾路徑 D盤(pán)C盤(pán)目錄需要使用雙斜杠r'D:\\', '\.wedrive' go = file_clean(r'D:\eong', '\.WeDrive') # 選擇要執(zhí)行的函數(shù)類(lèi)型del_all_file刪除件夾及子文件夾下指定文件,del_file只刪除當(dāng)前選擇文件夾的指定文件 go.del_file()
python刪除本地夾里重復(fù)文件的方法
import os import hashlib import logging import sys def logger(): """ 獲取logger""" logger = logging.getLogger() if not logger.handlers: # 指定logger輸出格式 formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s') # 文件日志 file_handler = logging.FileHandler("test.log") file_handler.setFormatter(formatter) # 可以通過(guò)setFormatter指定輸出格式 # 控制臺(tái)日志 console_handler = logging.StreamHandler(sys.stdout) console_handler.formatter = formatter # 也可以直接給formatter賦值 # 為logger添加的日志處理器 logger.addHandler(file_handler) logger.addHandler(console_handler) # 指定日志的最低輸出級(jí)別,默認(rèn)為WARN級(jí)別 logger.setLevel(logging.INFO) return logger def get_md5(filename): m = hashlib.md5() mfile = open(filename, "rb") m.update(mfile.read()) mfile.close() md5_value = m.hexdigest() return md5_value def get_urllist(): #替換指定的文件夾路徑即可 base = ("F:\\pythonFile\\煎蛋網(wǎng)\\無(wú)聊圖\\jpg\\") list = os.listdir(base) urlList=[] for i in list: url = base + i urlList.append(url) return urlList if __name__ == '__main__': log = logger() md5List =[] urlList =get_urllist() for a in urlList: md5 =get_md5(a) if (md5 in md5List): os.remove(a) print("重復(fù):%s"%a) log.info("重復(fù):%s"%a) else: md5List.append(md5) # print(md5List) print("一共%s張照片"%len(md5List))
到此這篇關(guān)于Python實(shí)現(xiàn)刪除重復(fù)文件的示例代碼的文章就介紹到這了,更多相關(guān)Python刪除重復(fù)文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬取用戶觀影數(shù)據(jù)并分析用戶與電影之間的隱藏信息!
看電影前很多人都喜歡去 『豆瓣』 看影評(píng),所以我爬取44130條 『豆瓣』 的用戶觀影數(shù)據(jù),分析用戶之間的關(guān)系,電影之間的聯(lián)系,以及用戶和電影之間的隱藏關(guān)系,需要的朋友可以參考下2021-06-06Python?PyQt5?開(kāi)啟線程防止界面卡死閃退問(wèn)題解決
這篇文章主要介紹了Python?PyQt5?開(kāi)啟線程避免界面卡死閃退,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06基于python框架Scrapy爬取自己的博客內(nèi)容過(guò)程詳解
這篇文章主要介紹了基于python框架Scrapy爬取自己的博客內(nèi)容過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08利用python寫(xiě)api接口實(shí)戰(zhàn)指南
api接口在我們開(kāi)發(fā)中的重要性相信大家都這篇文章主要給大家介紹了關(guān)于利用python寫(xiě)api接口實(shí)戰(zhàn)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Tensorflow實(shí)現(xiàn)多GPU并行方式
今天小編就為大家分享一篇Tensorflow實(shí)現(xiàn)多GPU并行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Python 繪制北上廣深的地鐵路線動(dòng)態(tài)圖
這篇文章主要介紹了用python制作北上廣深——地鐵線路動(dòng)態(tài)圖,文中的示例代碼講解詳細(xì),對(duì)我們的工作或?qū)W習(xí)都有一定的價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下2021-12-12python判斷變量是否為int、字符串、列表、元組、字典的方法詳解
這篇文章主要介紹了python判斷變量是否為int、字符串、列表、元組、字典的方法詳解,需要的朋友可以參考下2020-02-02Python調(diào)用C# Com dll組件實(shí)戰(zhàn)教程
下面小編就為大家?guī)?lái)一篇Python調(diào)用C# Com dll組件實(shí)戰(zhàn)教程。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10腳本測(cè)試postman快速導(dǎo)出python接口測(cè)試過(guò)程示例
這篇文章主要介紹了關(guān)于腳本測(cè)試postman快速導(dǎo)出python接口測(cè)試示例的過(guò)程操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09