網站首頁 編程語言 正文
此程序主要是針對某個目錄下的全部文件進行篩選,會刪除重復的文件。
原理很簡單,會計算每個文件的哈希,將哈希存入一個字典,文件名對應哈希。
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("執行進度為:",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("文件總數為:",sum)
print("此處處理的重復文件數目為:",i)
在使用的時候直接調用下面那個函數即可,傳入參數為目錄路徑。
例如下面這樣:
remove_duplicate_files("Y:\圖片合集")
當然,你也可以將程序打包為一個exe文件,甚至為它添加簡單的頁面,讓非計算機專業的人也能輕易使用。
補充
當然除了上文的方法,還有很多方法可以實現,下面是小編為大家整理的內容,希望對大家有所幫助
Python刪除文件夾內指定的重復文件
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')
# 選擇要執行的函數類型del_all_file刪除件夾及子文件夾下指定文件,del_file只刪除當前選擇文件夾的指定文件
go.del_file()
python刪除本地夾里重復文件的方法
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指定輸出格式
# 控制臺日志
console_handler = logging.StreamHandler(sys.stdout)
console_handler.formatter = formatter # 也可以直接給formatter賦值
# 為logger添加的日志處理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 指定日志的最低輸出級別,默認為WARN級別
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\\煎蛋網\\無聊圖\\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("重復:%s"%a)
log.info("重復:%s"%a)
else:
md5List.append(md5)
# print(md5List)
print("一共%s張照片"%len(md5List))
原文鏈接:https://blog.csdn.net/qq_56438857/article/details/128969504
相關推薦
- 2022-04-19 C#多線程系列之多線程鎖lock和Monitor_C#教程
- 2022-09-01 MongoDB對Document(文檔)的插入、刪除及更新_MongoDB
- 2022-09-04 Go語言簡介和環境配置_Golang
- 2022-09-10 正則表達式從原理到實戰全面學習小結_正則表達式
- 2022-04-05 easyswoole轉發報錯 writev() failed (104 nginx
- 2022-10-04 .NET??Smobiler的復雜控件的由來與創造_ASP.NET
- 2022-06-20 Flutter路由守衛攔截的實現_Android
- 2022-04-17 spring cloud config和bus組件實現自動刷新
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支