Python :check大文件或者文件夹中所有文件MD5值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python :check大文件或者文件夹中所有文件MD5值相关的知识,希望对你有一定的参考价值。
用hashlib.md5
获得打开文件的md5值,但是当文件很大的时候,比如好几个G,就会吃掉过多的内存,有没有办法在不打开文件的情况下,获得大文件的md5值呢?或者给出特定文件夹,check出文件夹中所有文件的MD5值并且写入特定文件中???
以下代码可以做到:
from hashlib import md5 import time import os def calMD5(str): #check string的MD5值 m = md5() m.update(str) return m.hexdigest() def calMD5ForFile(file): #check文件的MD5值 statinfo = os.stat(file) if int(statinfo.st_size)/(1024*1024) >= 1000 : print ("File size > 1000, move to big file...") return calMD5ForBigFile(file) m = md5() f = open(file, 'rb') m.update(f.read()) f.close() return m.hexdigest() def calMD5ForFolder(dir,MD5File): #check文件夹的MD5值 outfile = open(MD5File,'w') for root, subdirs, files in os.walk(dir): for file in files: filefullpath = os.path.join(root, file) """print filefullpath""" filerelpath = os.path.relpath(filefullpath, dir) md5 = calMD5ForFile(filefullpath) print(md5) outfile.write(filerelpath+"\t\t******-----------******\t\t"+md5+"\n") outfile.close() def calMD5ForBigFile(file): #check大文件的MD5值 m = md5() f = open(file, 'rb') buffer = 8192 # why is 8192 | 8192 is fast than 2048 while 1: chunk = f.read(buffer) if not chunk : break m.update(chunk) f.close() return m.hexdigest() checkmd5 = calMD5ForFolder(r'D:\software',r'C:\Users\Desktop\a.txt') print(checkmd5)
亲测,,,很好用
以上是关于Python :check大文件或者文件夹中所有文件MD5值的主要内容,如果未能解决你的问题,请参考以下文章
git系列---初始工程文件太大或者文件数太多时,向远程仓库push时总是失败,如何解决?