python 计算文件的MD5
2013-08-05 16:15
459 查看
一、使用python自带的hash库hashlib
对于大文件,不能简单的一次载入内存,需要对文件分片不断的update完成(代码中如果文件超过100M,就需要分片了)。具体代码如下:
二、测试
从meizu官网上下了个固件更新包,检测测试了下,没有问题。
测试执行:python calc_file_md5.py filename
三、更新下代码
可以计算hashlib中所有的所有的hash值,包括:md5, sha1, sha224, sha256, sha384, sha512.
主要思路是:采用字典结构来存储hash函数,达到泛型。
代码如下:
对于大文件,不能简单的一次载入内存,需要对文件分片不断的update完成(代码中如果文件超过100M,就需要分片了)。具体代码如下:
import os import sys import hashlib _FILE_SLIM = (100*1024*1024) # 100MB def file_md5(filename): calltimes = 0 hmd5 = hashlib.md5() fp = open(filename,"rb") f_size = os.stat(filename).st_size if f_size>_FILE_SLIM: while(f_size>_FILE_SLIM): hmd5.update(fp.read(_FILE_SLIM)) f_size/=_FILE_SLIM calltimes += 1 #delete if(f_size>0) and (f_size<=_FILE_SLIM): hmd5.update(fp.read()) else: hmd5.update(fp.read()) return (hmd5.hexdigest(),calltimes) if __name__ == '__main__': if len(sys.argv) == 2: filepath = os.path.abspath(sys.argv[1]) (hvalue,ctimes) = file_md5(filepath) print(hvalue)
二、测试
从meizu官网上下了个固件更新包,检测测试了下,没有问题。
测试执行:python calc_file_md5.py filename
三、更新下代码
可以计算hashlib中所有的所有的hash值,包括:md5, sha1, sha224, sha256, sha384, sha512.
主要思路是:采用字典结构来存储hash函数,达到泛型。
代码如下:
# coding=gbk __doc__ = ''' filehash.py md5/sha1/sha224/sha256/sha384/sha512 targetfile argc must be equal to 3 ''' import os import hashlib __supported_hashfunc = {'md5':hashlib.md5, 'sha1':hashlib.sha1, 'sha224':hashlib.sha224, 'sha256':hashlib.sha256, 'sha384':hashlib.sha384, 'sha512':hashlib.sha512} __FILE_SLIM = (100*1024*1024) # 100MB def filehash(hfunc,filename): hobj = hfunc() fp = open(filename,"rb") f_size = os.stat(filename).st_size while(f_size > __FILE_SLIM): hobj.update(fp.read(__FILE_SLIM)) f_size /= __FILE_SLIM #print("o.o") if(f_size>0) and (f_size <= __FILE_SLIM): hobj.update(fp.read()) fp.close() return hobj.hexdigest() def main(): import sys if len(sys.argv) == 3: try: hfunc = __supported_hashfunc[sys.argv[1].lower()] #print(sys.argv[1]) filepath = os.path.abspath(sys.argv[2]) hvalue = filehash(hfunc,filepath) print(sys.argv[1],hvalue,sep=':') except KeyError: print('''input cmd:"%s" is error'''%sys.argv[1]) else: print(__doc__) if __name__ == '__main__': main()
相关文章推荐
- python里如何计算大文件的md5
- python 文件MD5 SHA1校验计算
- 【Python】计算文件MD5 和 SHA1
- 使用Python计算指定目录md5,根据md5找查到相同的文件并打印
- Python 计算某个目录下的文件md5并且以md5批量重命名
- 文件md5计算小工具
- python计算文件的行数和读取某一行内容的实现方法
- python计算文本文件行数的方法
- JAVA计算文件的MD5及SHA1等值
- shell for 循环、查看文件大小、计算文件md5
- Python:遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序
- python 文件的md5
- 【转载】python计算文件的行数和读取某一行内容的实现方法
- python 键盘输入数字的计算 文件的读写
- java使用计算md5校验码方式比较两个文件是否相同
- 测试python计算MD5和CRC的速度
- 用java计算文件MD5(文件hash)
- python md5 计算的例子
- Python-老男孩-01_基础_文件IO_函数_yield_三元_常用内置函数_反射_random_md5_序列化_正则表达式_time
- Python -- 计算文件的md5值