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)單的頁面,讓非計(jì)算機(jī)專業(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盤C盤目錄需要使用雙斜杠r'D:\\', '\.wedrive'
go = file_clean(r'D:\eong', '\.WeDrive')
# 選擇要執(zhí)行的函數(shù)類型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) # 可以通過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)\\無聊圖\\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 將圖片復(fù)制到系統(tǒng)剪貼中
今天小編就為大家分享一篇使用python 將圖片復(fù)制到系統(tǒng)剪貼中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python 申請(qǐng)內(nèi)存空間,用于創(chuàng)建多維數(shù)組的實(shí)例
今天小編就為大家分享一篇python 申請(qǐng)內(nèi)存空間,用于創(chuàng)建多維數(shù)組的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python爬取肯德基官網(wǎng)ajax的post請(qǐng)求實(shí)現(xiàn)過程
這篇文章主要介紹了Python爬取肯德基官網(wǎng)ajax的post請(qǐng)求實(shí)現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家學(xué)有所得,多多進(jìn)步2021-10-10
python實(shí)現(xiàn)簡(jiǎn)單猜單詞游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單猜單詞游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
使用python搭建代理IP池實(shí)現(xiàn)接口設(shè)置與整體調(diào)度
在網(wǎng)絡(luò)爬蟲中,代理IP池是一個(gè)非常重要的組件,由于許多網(wǎng)站對(duì)單個(gè)IP的請(qǐng)求有限制,因此,我們需要一個(gè)代理IP池,在本文中,我們將使用Python來構(gòu)建一個(gè)代理IP池,然后,我們將使用這個(gè)代理IP池來訪問我們需要的數(shù)據(jù),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2023-12-12
深入淺析Python中l(wèi)ist的復(fù)制及深拷貝與淺拷貝
這篇文章主要介紹了Python中l(wèi)ist的復(fù)制及深拷貝與淺拷貝及區(qū)別解析 ,需要的朋友可以參考下2018-09-09
如何實(shí)現(xiàn)Django Rest framework版本控制
這篇文章主要介紹了如何實(shí)現(xiàn)Django Rest framework版本控制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
解決遇到PermissionError:[Errno 13] Permission den
遇到"PermissionError:[Errno 13] Permission denied"通常是權(quán)限不足導(dǎo)致,解決此問題的方法包括檢查并更改文件權(quán)限,使用管理員權(quán)限運(yùn)行命令,或接觸文件所有者,這些步驟有助于確保用戶具有執(zhí)行操作所需的權(quán)限,有時(shí),文件或目錄可能被鎖定2024-09-09

