網站首頁 編程語言 正文
Python自動化辦公之刪除重復文件
思路介紹
兩層判斷:
1.先判斷文件大小是否為相同,大小不同則不是重復文件,予以保留;
2.文件大小相同再判斷文件md5,md5相同,則是重復文件,予以刪除。
源碼解說
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
# 獲取路徑內的所有文件名,默認是升序排列,相同文件將會保留日期時間最新的
all_files = Path(path).glob('*.*')
# 降序排列,相同文件將會保留文件名最短的(即日期時間最久的)
all_files = sorted(all_files, reverse=True)
# 遍歷文件路徑內的所有文件
for file in all_files:
# 獲取文件所占字節大小,作為數據字典的鍵
size = file.stat().st_size
# name_and_md5列表用于存儲文件絕對路徑和md5值,作為數據字典的值
name_and_md5 = [file, '']
# 針對重復文件進行處理,生成字典存儲相關信息
# 字典all_size中key是size,value是name_and_md5列表
# 針對相同size的文件,再調用getmd5函數,獲取文件的md5值
# 文件size不同(不在all_size.keys()中),則自動判斷為不同的文件,予以保留
if size in all_size.keys():
# 調用getmd5函數,獲取文件的md5值
new_md5 = getmd5(file)
if all_size[size][1] == '':
all_size[size][1] = getmd5(all_size[size][0])
# 判斷md5值存在,即文件重復,則刪除文件。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'文件總數:{total_file}')
print(f'刪除個數:{total_delete}')
if __name__ == '__main__':
main()
效果圖:
代碼說明:特別感謝瑜亮老師提供的代碼!
知識拓展
pathlib和os,os.path常用的函數對應關系
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() ?# 創建文件夾
Path.rmdir() ?# 刪除文件夾,文件夾必須為空
Path.unlink() ?# 刪除文件
原文鏈接:https://mp.weixin.qq.com/s/7soU0wT3B4fufZ8s2Cyy5Q
相關推薦
- 2022-09-20 Python處理時間戳和時間計算等的腳本分享_python
- 2022-12-11 C語言冷知識之預處理字符串操作符詳解_C 語言
- 2022-11-02 Android?shape標簽使用方法介紹_Android
- 2023-03-25 Golang實現優雅的將struct轉換為map_Golang
- 2022-04-03 關于Rust?使用?dotenv?來設置環境變量的問題_相關技巧
- 2022-06-24 SingleFlight模式的Go并發編程學習_Golang
- 2022-07-17 用Android?studio實現簡易計算器功能_Android
- 2023-01-18 高斯衰減python實現方式_python
- 最近更新
-
- 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同步修改后的遠程分支