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/8/26 19:08:50 阅读更多 →
算法基础第四讲 数据结构

算法基础第四讲 数据结构

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

2026/8/26 19:08:50 阅读更多 →
具身智能TVA-VLA实现开放环境常识推理突破

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

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

2026/8/26 19:07:49 阅读更多 →

最新新闻

Umi-OCR 使用指南:离线 OCR 如何识别截图、批量图片与扫描版 PDF(附 7 个实用技巧)

Umi-OCR 使用指南:离线 OCR 如何识别截图、批量图片与扫描版 PDF(附 7 个实用技巧)

Umi-OCR 使用指南:离线 OCR 如何识别截图、批量图片与扫描版 PDF(附 7 个实用技巧) 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印…

2026/8/26 19:47:38 阅读更多 →
163MusicLyrics 三分钟上手:网易云、QQ音乐歌词批量下载完整攻略

163MusicLyrics 三分钟上手:网易云、QQ音乐歌词批量下载完整攻略

163MusicLyrics 三分钟上手:网易云、QQ音乐歌词批量下载完整攻略 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 拷歌进车机或U盘时最头疼的就是歌词全缺失&a…

2026/8/26 19:47:38 阅读更多 →
RevokeMsgPatcher:Windows 平台的微信/QQ/TIM 防撤回补丁工具

RevokeMsgPatcher:Windows 平台的微信/QQ/TIM 防撤回补丁工具

RevokeMsgPatcher:Windows 平台的微信/QQ/TIM 防撤回补丁工具 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://git…

2026/8/26 19:47:38 阅读更多 →
OpenCore Legacy Patcher 完整指南:四步让老Mac装上新版macOS

OpenCore Legacy Patcher 完整指南:四步让老Mac装上新版macOS

OpenCore Legacy Patcher 完整指南:四步让老Mac装上新版macOS 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老机器硬件还够用,系统却…

2026/8/26 19:47:38 阅读更多 →
Video2X 完整教程:5 分钟把 480p 老视频变成 4K 高清成片

Video2X 完整教程:5 分钟把 480p 老视频变成 4K 高清成片

Video2X 完整教程:5 分钟把 480p 老视频变成 4K 高清成片 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/vi…

2026/8/26 19:47:38 阅读更多 →
PDF补丁丁:免费开源PDF工具箱完整指南,批量编辑书签、合并文档与提取图片一次讲清

PDF补丁丁:免费开源PDF工具箱完整指南,批量编辑书签、合并文档与提取图片一次讲清

PDF补丁丁:免费开源PDF工具箱完整指南,批量编辑书签、合并文档与提取图片一次讲清 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片…

2026/8/26 19:46:38 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →