Python计算文件MD5值的两种方法:小文件与大文件处理
本文介绍了在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值实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













