
示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载本指南围绕开源仓库 python-mini-projects 中的 Duplicate Files Remover 项目展开系统讲解如何用纯 Python 标准库实现扫描目录 → 计算文件哈希 → 删除内容重复文件的完整流程。阅读本文后你将掌握分块读取文件计算 MD5 的实现技巧、基于哈希字典的去重策略以及该方案在实际使用中的边界与注意事项可以直接在自己的目录中运行和扩展这套去重逻辑。工具定位与适用场景Duplicate Files Remover 是一个单文件、零第三方依赖的 Python 脚本其核心目标非常明确删除脚本所在目录中的重复文件。它通过对比文件内容的 MD5 哈希来判断两个文件是否重复一旦发现哈希相同就删除后出现的那个文件从而释放磁盘空间。它特别适合以下场景下载目录或文档目录中存在大量内容相同、文件名不同的副本备份文件夹中积累了多份同名或异名的相同内容需要快速清理某个目录中的冗余文件而又不想引入 GUI 工具或重量级去重软件。由于脚本只作用于脚本运行时所在的当前目录操作范围清晰可控适合作为理解哈希去重这一经典思路的入门示例。快速开始环境要求与运行方式依赖清单根据项目 README 的说明脚本不依赖任何外部库仅使用 Python 标准库中的两个模块模块用途os遍历当前目录、判断文件、删除文件hashlib计算文件的 MD5 哈希这意味着只要系统安装了 Python 3 即可直接运行无需执行pip install任何包。运行方式将终端切换到目标目录后直接执行python3 duplicatefileremover.py脚本会在当前工作目录中完成扫描、比对与删除并在终端打印被删除的文件清单详见下文运行效果一节。运行前建议先对目录中的文件做一次备份或先在测试目录中试用因为该脚本的删除操作是不可恢复的。工作原理一条主线、三个步骤README 对脚本工作方式给出了精炼概括脚本先列出目录中的所有文件然后逐一计算每个文件的 MD5 哈希当两个文件的哈希相同时就删除后出现的文件。结合源码可以拆解为三个核心步骤枚举文件使用os.listdir()列出当前目录的全部条目并用os.path.isfile()过滤出其中的文件目录、子目录不会被纳入计算哈希对每个文件调用hashFile()得到其内容的 MD5 十六进制摘要比对去重以哈希值为键维护一个字典若某哈希已存在说明内容重复执行os.remove()删除该文件否则将哈希与文件名记入字典作为保留样本。从实现上看脚本默认保留第一个遇到的文件删除之后所有哈希相同者。源码剖析一hashFile 分块哈希的实现细节去重正确性的根基在于哈希计算。hashFile函数位于 duplicatefileremover.py其实现如下def hashFile(filename): # For large files, if we read it all together it can lead to memory overflow, # So we take a blocksize to read at a time BLOCKSIZE 65536 hasher hashlib.md5() with open(filename, rb) as file: # Reads the particular blocksize from file buf file.read(BLOCKSIZE) while(len(buf) 0): hasher.update(buf) buf file.read(BLOCKSIZE) return hasher.hexdigest()几个值得注意的实现要点分块读取控制内存占用代码注释明确指出一次性读取大文件可能导致内存溢出因此采用BLOCKSIZE 65536即 64 KB的分块策略逐块送入hasher.update()。无论文件多大单次驻留内存的数据量都被限制在 64 KB 级别这是处理大文件时的关键工程实践。以二进制模式打开open(filename, rb)确保哈希计算基于原始字节流不受文本编码、换行符转换如 Windows 的\r\n影响保证内容相同即哈希相同的判定准确。流式更新哈希hashlib.md5()对象支持update()增量更新最终通过hexdigest()返回 32 位十六进制字符串作为文件的唯一指纹。循环终止条件while(len(buf) 0)在读到文件末尾read返回空字节串时退出逻辑简洁且能覆盖空文件空文件也会得到一个固定的 MD5 值因此两个空文件同样会被识别为重复。源码剖析二主流程与去重策略主流程位于 duplicatefileremover.pyif __name__ __main__: # Dictionary to store the hash and filename hashMap {} # List to store deleted files deletedFiles [] filelist [f for f in os.listdir() if os.path.isfile(f)] for f in filelist: key hashFile(f) # If key already exists, it deletes the file if key in hashMap.keys(): deletedFiles.append(f) os.remove(f) else: hashMap[key] f if len(deletedFiles) ! 0: print(Deleted Files) for i in deletedFiles: print(i) else: print(No duplicate files found)逐段解读其设计hashMap字典以文件内容哈希 → 文件名为映射是去重的核心数据结构。Python 字典基于哈希表实现key in hashMap.keys()的查询为平均 O(1) 复杂度因此对海量文件的比对也不会退化为两两穷举。filelist列表推导[f for f in os.listdir() if os.path.isfile(f)]只收集当前目录中的文件条目。需要说明的是os.listdir()仅枚举一层目录不会递归进入子目录os.path.isfile()会跟随符号链接因此指向文件的软链接也会被纳入比对范围。先到先留、后到即删遍历时第一个文件存入hashMap后续哈希命中者立即os.remove(f)删除并将文件名追加进deletedFiles用于输出汇报。整个删除过程发生在扫描的同一趟循环中。结果汇报若存在删除记录则打印Deleted Files标题与完整清单否则打印No duplicate files found反馈清晰直观。运行效果终端输出解读上图是脚本在 Linux 终端中的真实运行效果截图来自项目仓库执行python3 duplicatefileremover.py后脚本输出Deleted Files标题随后逐行列出被删除的重复文件如57w.txt、5ay.txt、28w.txt等大量.txt副本验证了内容相同的文件只保留一个、其余全部清理的实际行为。若目录中不存在任何重复文件则会输出No duplicate files found。边界条件与使用注意事项以下内容基于源码结构推断供实际使用时参考删除操作不可恢复os.remove()是永久删除不会移入回收站。建议首次使用前在副本目录中试运行或先修改脚本将删除改为移动到备份目录。MD5 哈希碰撞的理论风险MD5 属于 128 位哈希工程实践中碰撞概率极低但严格来说并非绝对安全。对于追求极致可靠性的场景可改用hashlib.sha256()仅需替换hashFile中的算法一行。无异常处理从源码结构看脚本未对os.remove()的失败如文件权限不足、文件被占用做try/except捕获遇到异常时程序会直接中断。在多用户或只读目录下运行时需注意这一点。仅覆盖当前目录os.listdir()不递归子目录中的重复文件不会被处理如需全盘清理可以自行扩展为os.walk()递归遍历。先到先留的取舍脚本保留第一个遇到的、删除后续重复者无法选择保留最新文件或保留指定目录中的文件。若需要保留策略可扩展需在删除前增加文件修改时间等条件的判断。总结Duplicate Files Remover 用不足 40 行代码完整展示了哈希去重这一经典方案的工程实现hashlib负责内容指纹os负责文件枚举与删除分块读取策略保证了处理大文件时的内存安全字典结构保证了比对的线性效率。对于希望理解文件系统操作、哈希算法应用或需要快速搭建目录清理工具的开发者而言README 与 duplicatefileremover.py 是一份简洁而完整的参考样例。赞分享示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载相关推荐python-mini-projects 之 Merge_pdfs基于 PyPDF2 的 PDF 合并脚本实战解析python mini projects 之 Merge_pdfs基于 PyPDF2 的 PDF 合并脚本实战解析 PDF 合并是日常文档处理中最常见的需求之示例工程python-mini-projects 实战基于 OpenWeatherMap API 的当前天气查询脚本Fetch_current_weatherpython mini projects 实战基于 OpenWeatherMap API 的当前天气查询脚本Fetch_current_weather 导示例工程图书搜索去重终极指南基于MD5哈希的智能数据清理方案图书搜索去重终极指南基于MD5哈希的智能数据清理方案 在数字阅读时代个人图书馆的规模日益增长但重复书籍文件不仅占用宝贵存储空间还会降低搜索效率。本文将介搜索引擎后端前端桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考