Python计算文件MD5值的两种方法:小文件与大文件处理

一颗松果
一颗松果
发布时间:2026-10-13| 2人浏览过
原创

本文介绍了在Python中计算文件MD5值的两种常用方法。针对较小文件,推荐一次性读取全部内容进行哈希计算;而对于较大文件,则建议采用分块读取的方式,每次读取固定字节数(如8096字节)并更新哈希对象,以避免内存溢出。两种方法计算结果一致,代码已在Python 3.x版本测试通过,适用于文件完整性校验等场景。

处理较小文件时,可采用一次性读取文件内容的策略。具体实现中,首先判断目标路径是否为有效文件,若存在则打开文件并创建MD5哈希对象。随后,直接读取文件的全部二进制数据并更新到哈希对象中,最后通过hexdigest()获取十六进制哈希码,转换为小写字符串后返回。该方法代码简洁,适合内存足以容纳整个文件的场景。

import hashlib
import os

def get_md5_01(file_path):
  md5 = None
  if os.path.isfile(file_path):
    f = open(file_path,'rb')
    md5_obj = hashlib.md5()
    md5_obj.update(f.read())
    hash_code = md5_obj.hexdigest()
    f.close()
    md5 = str(hash_code).lower()
  return md5

if __name__ == "__main__":
  file_path = r'D:\test\test.jar'
  md5_01 = get_md5_01(file_path)
  print(md5_01)

处理较大文件时,为避免一次性加载导致内存溢出,应采用分块读取策略。具体实现中,以二进制模式打开文件,创建MD5哈希对象后,进入循环读取文件内容。每次读取固定大小的数据块(例如8096字节),若读取到的数据为空则终止循环,否则将读取的数据块更新到哈希对象中。循环结束后,获取十六进制哈希码并转换为小写字符串返回。这种方式能有效控制内存使用,适用于大文件处理。

import hashlib
import os

def get_md5_02(file_path):
  f = open(file_path,'rb')  
  md5_obj = hashlib.md5()
  while True:
    d = f.read(8096)
    if not d:
      break
    md5_obj.update(d)
  hash_code = md5_obj.hexdigest()
  f.close()
  md5 = str(hash_code).lower()
  return md5

if __name__ == "__main__":
  file_path = r'D:\test\test.jar'
  md5_02 = get_md5_02(file_path)
  print(md5_02)

说明:对于同一个文件,两种方法计算得到的md5是一致的。

注:以上代码在Python 3.x版本测试通过。

以上这篇python 计算文件的md5值实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。