Python办公13:自动识别并删除电脑中的重复文件与大内存垃圾
13空间清理——自动识别并删除电脑中的重复文件与大内存垃圾第二阶段文件管理与系统自动化9-15场景引入C 盘红了下载文件夹占了几十 GB重复文件到处都是手动清理太慢且不彻底。本节教你用 Python 自动扫描找重复文件基于 MD5 哈希值精准识别内容完全相同的文件找大文件按大小排序快速定位空间占用大户清理临时文件自动删除.tmp、.log等垃圾文件技术原理重复文件检测判断两个文件是否相同有两种方式方法原理优点缺点比大小比较文件大小超快大小相同≠内容相同比哈希计算 MD5/SHA256 值100% 精准计算量大最优策略先按大小分组 → 同大小的文件再算哈希 → 减少不必要的计算。扫描所有文件 ↓ 按文件大小分组 ↓ 同大小的文件计算 MD5 ↓ MD5 相同的即为重复文件环境准备pipinstallhashlibhashlib是 Python 内置模块。完整代码importosimporthashlibfrompathlibimportPathfromcollectionsimportdefaultdict# 方案 1查找重复文件 deffind_duplicate_files(search_dir,min_size_mb0): 查找目录中的重复文件基于 MD5 哈希 参数: search_dir: 搜索目录 min_size_mb: 最小文件大小MB忽略小于此值的文件 返回: 重复文件字典{md5: [文件路径列表]} search_pathPath(search_dir)min_sizemin_size_mb*1024*1024# 第 1 步按文件大小分组size_groupsdefaultdict(list)print(正在扫描文件...)file_count0forfile_pathinsearch_path.rglob(*):iffile_path.is_file():sizefile_path.stat().st_sizeifsizemin_size:size_groups[size].append(str(file_path))file_count1print(f扫描完成:{file_count}个文件)# 第 2 步对同大小的文件计算 MD5hash_groupsdefaultdict(list)forsize,filesinsize_groups.items():iflen(files)2:continue# 只有一个文件不可能重复forfile_pathinfiles:file_md5calculate_md5(file_path)hash_groups[file_md5].append(file_path)# 第 3 步筛选出重复的文件组duplicates{md5:pathsformd5,pathsinhash_groups.items()iflen(paths)1}# 第 4 步报告total_wasted0formd5,pathsinduplicates.items():file_sizePath(paths[0]).stat().st_size wastedfile_size*(len(paths)-1)# 浪费的空间 单文件大小 × 重复数total_wastedwastedprint(f\nMD5:{md5[:8]}... 大小:{file_size/1024:.1f}KB)forpinpaths:print(f -{p})print(f\n{*50})print(f发现{len(duplicates)}组重复文件)print(f可释放空间:{total_wasted/1024/1024:.2f}MB)returnduplicatesdefcalculate_md5(file_path,chunk_size8192):计算文件的 MD5 哈希值md5hashlib.md5()withopen(file_path,rb)asf:whileTrue:chunkf.read(chunk_size)ifnotchunk:breakmd5.update(chunk)returnmd5.hexdigest()# 方案 2查找大文件 deffind_large_files(search_dir,top_n20,min_size_mb10): 查找目录中最大的 N 个文件 参数: search_dir: 搜索目录 top_n: 返回最大的 N 个文件 min_size_mb: 最小文件大小MB search_pathPath(search_dir)min_sizemin_size_mb*1024*1024files[]print(正在扫描大文件...)forfile_pathinsearch_path.rglob(*):iffile_path.is_file():sizefile_path.stat().st_sizeifsizemin_size:files.append((str(file_path),size))# 按大小降序排序files.sort(keylambdax:x[1],reverseTrue)print(f\n{排名:5}{大小:15}{路径})print(-*80)foridx,(path,size)inenumerate(files[:top_n],1):size_strformat_size(size)print(f{idx:5}{size_str:15}{path})returnfiles[:top_n]defformat_size(size_bytes):将字节数转为可读格式forunitin[B,KB,MB,GB,TB]:ifsize_bytes1024:returnf{size_bytes:.1f}{unit}size_bytes/1024# 方案 3清理临时/垃圾文件 defclean_temp_files(search_dir,dry_runTrue): 清理临时文件和垃圾文件 参数: search_dir: 搜索目录 dry_run: True预览False执行删除 TEMP_EXTENSIONS{.tmp,.temp,.log,.bak,.swp,.cache,.thumbs,.old,.original,}search_pathPath(search_dir)cleaned_count0cleaned_size0forfile_pathinsearch_path.rglob(*):iffile_path.is_file()andfile_path.suffix.lower()inTEMP_EXTENSIONS:sizefile_path.stat().st_size cleaned_sizesizeifdry_run:print(f[预览删除]{file_path}({format_size(size)}))else:try:file_path.unlink()print(f[已删除]{file_path}({format_size(size)}))exceptPermissionError:print(f[跳过-被占用]{file_path})cleaned_count1print(f\n{*50})action预览ifdry_runelse清理print(f{action}完成:{cleaned_count}个文件)print(f可释放空间:{format_size(cleaned_size)})# 使用示例 if__name____main__:TARGET_DIRrD:# 方案 1查找重复文件忽略小于 1MB 的# find_duplicate_files(TARGET_DIR, min_size_mb1)# 方案 2查找最大的 20 个文件超过 10MB 的find_large_files(TARGET_DIR,top_n20,min_size_mb10)# 方案 3预览临时文件不删除# clean_temp_files(rC:\Windows\Temp, dry_runTrue)代码逐行解析1. MD5 分块计算defcalculate_md5(file_path,chunk_size8192):md5hashlib.md5()withopen(file_path,rb)asf:whileTrue:chunkf.read(chunk_size)ifnotchunk:breakmd5.update(chunk)不一次性读取整个文件而是分块读取8KB/次这样即使是 GB 级大文件也不会撑爆内存。2. 大小分组优化forsize,filesinsize_groups.items():iflen(files)2:continue# 跳过唯一大小的文件只有大小相同的文件才可能重复。先过滤掉唯一的文件大小大幅减少 MD5 计算量。3. 空间统计wastedfile_size*(len(paths)-1)每组重复文件中保留 1 份其余都是浪费的空间。进阶技巧技巧 1自动删除重复文件保留最新的一份defdelete_duplicates(duplicates,keepnewest):formd5,pathsinduplicates.items():# 按修改时间排序paths_with_time[(p,Path(p).stat().st_mtime)forpinpaths]paths_with_time.sort(keylambdax:x[1],reverse(keepnewest))# 保留第一份删除其余forpath,_inpaths_with_time[1:]:os.remove(path)print(f已删除:{path})技巧 2查找相似图片感知哈希fromPILimportImageimportimagehashdefget_image_hash(image_path):imgImage.open(image_path)returnimagehash.phash(img)# 两张图片的哈希距离 5 认为是相似图片常见问题Q1MD5 碰撞两个不同文件有相同的 MD5MD5 碰撞概率极低约 2^64 分之一对于日常文件清理完全足够。如需更高安全性可改用 SHA256hashlib.sha256()Q2扫描速度太慢使用min_size_mb过滤小文件排除不需要扫描的目录如node_modules/只扫描特定类型文件Q3误删了重要文件使用dry_runTrue先预览确认后再执行实际删除。重要数据请先备份。总结清理策略函数效果找重复find_duplicate_files()基于 MD5 精准去重找大文件find_large_files()Top N 大文件排序清垃圾clean_temp_files()删除临时/缓存文件本节掌握了三种空间清理方法帮助你快速释放磁盘空间。下一节预告14压缩包处理——批量解压文件夹内的所有 ZIP/RAR 并自动分类

相关新闻

DeepSeek Harness 会话日志与会话管理:fork/resume/transcript 深度实战

DeepSeek Harness 会话日志与会话管理:fork/resume/transcript 深度实战

DeepSeek Harness 会话日志与会话管理:fork/resume/transcript 深度实战系列导航:本篇是 DeepSeek Harness 实战系列第 3 篇。前序《编码 Agent 实战》《框架对比》已发布。本文钻进 DSH 最被低估、却最该先理解的能力——会话日志。理解了它&#xff0c…

2026/10/25 9:42:34 阅读更多 →
算法基础第四讲 数据结构

算法基础第四讲 数据结构

单调栈什么是单调栈? 单调栈,顾名思义,就是具有单调性的栈。它依旧是⼀个栈结构,只不过⾥⾯存储的数据是递增或者 递减的。这种结构是很容易实现的(如下⾯的代码),但重点是维护⼀个单调栈的意义…

2026/11/1 17:18:07 阅读更多 →
具身智能TVA-VLA实现开放环境常识推理突破

具身智能TVA-VLA实现开放环境常识推理突破

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/10/20 16:14:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻