新闻中心
Python 如何高效比对两个文件是否相同
判断文件是否相同可通过哈希比对、filecmp模块、分块比对和元信息预筛实现,分别适用于大文件、简单场景、超大文件和批量处理,兼顾效率与准确性。

判断两个文件是否相同,关键在于准确与效率的平衡。直接读取全部内容对比虽然简单,但对大文件不友好。以下是几种高效且实用的方法。
1. 使用文件哈希值比对
通过计算文件的哈希(如 MD5、SHA256)来判断内容是否一致,适合大文件或需要远程比对的场景。
优点:只需一次完整读取,内存可控,支持分块处理。
示例代码:
import hashlib
def get_file_hash(filepath, hash_algo=hashlib.md5):
hash_obj = hash_algo()
with open(filepath, 'rb') as f:
for chunk in iter(lambda: f.read(8192), b""):
hash_obj.update(chunk)
return hash_obj.hexdigest()
if get_file_hash('file1.txt') == get_file_hash('file2.txt'):
print("文件内容相同")
else:
print("文件内容不同")
2. 使用 filecmp 模块快速判断
Python
标准库 filecmp 提供了现成的文件比较功能,简洁高效。
示例:
import filecmp
if filecmp.cmp('file1.txt', 'file2.txt', shallow=False):
print("文件相同")
else:
print("文件不同")
shallow=True 时只比较文件元信息(如大小、修改时间),速度快;设为 False 则逐字节比对内容。
3. 逐块比对避免高内存占用
对于超大文件,可分块读取并实时比对,发现差异立即退出,节省时间。
小云雀
剪映出品的AI视频和图片创作助手
1949
查看详情
实现方式:
- 同时打开两个文件,以固定大小(如 4KB)读取
- 每读一块就进行比对
- 一旦发现不同,立刻返回 False
代码示例:
def files_equal(file1, file2, block_size=8192):
with open(file1, 'rb') as f1, open(file2, 'rb') as f2:
while True:
b1 = f1.read(block_size)
b2 = f2.read(block_size)
if b1 != b2:
return False
if not b1:
break
return True
4. 先比较文件基本信息
在进行内容比对前,先检查文件大小和修改时间,能快速排除明显不同的文件。
示例:
import os
def quick_compare(file1, file2):
stat1 = os.stat(file1)
stat2 = os.stat(file2)
if stat1.st_size != stat2.st_size:
return False # 大小不同,肯定不一样
return filecmp.cmp(file1, file2, shallow=False)
基本上就这些。根据使用场景选择合适方法:追求简洁用 filecmp,大文件推荐哈希或分块比对,批量处理前先做大小过滤更高效。
以上就是Python 如何高效比对两个文件是否相同的详细内容,更多请关注其它相关文章!
# 中文网
# 推广营销策划外包
# 杭州营销推广怎么投放
# 免费看影视网站如何推广
# 营销网络推广效果怎么样
# 无锡网站建设网站优化
# 北京做网站推广工资多少
# 营销推广方案温泉
# 正定seo搜索优化服务
# 辽宁网站品牌优化方案
# seo公司网站规则
# 解决问题
# 几种
# python
# 相关文章
# 适用于
# 设为
# 只需
# 如何做
# 大文件
# 比对
# 标准库
# 内存占用
# 字节
# go
# 文件比对
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
163邮箱注册官网 免费申请163个人邮箱
腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
痛风发作了怎么办? 快速止痛和后期饮食调理
React Hooks最佳实践:动态组件状态管理的组件化方案
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
绝地鸭卫平a核爆刀流玩法攻略
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
ArrayList与LinkedList操作复杂度详解:遍历与修改
J*aScript数据结构转换:将对象数组按类别分组
C#使用XPath查询节点时出错? 常见语法错误与调试技巧
Win11怎么开启省电模式_Win11电池节电模式自动开启
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
响应式容器内容自动缩放与宽高比维持教程
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
J*a应用集成GitHub CLI与API认证指南
HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符
机器学习中对数变换预测结果的反向还原
海棠电脑版入口_通过电脑访问海棠官网阅读
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
在python-socketio事件处理器中安全访问Flask应用上下文
Golang如何使用const iota_Go iota常量计数器讲解
Python实时数据流中的动态最值查找策略
J*a实现学校排课程序_面向对象结构化项目示例
小米汽车11月交付量突破40000台!雷军:将继续努力
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
葱吃多了会怎样 葱吃多了会伤胃吗
Lar*el递归关系中排除子孙节点的策略
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题
J*aScript动态修改指定div内所有a标签样式指南
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
React中useState与局部变量:理解组件状态管理与渲染机制
J*aScript实现动态背景色下的文本与按钮颜色自适应调整


2025-11-19
浏览次数:次
返回列表