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时总是失败,如何解决?

如何获取目录下的文件数(一行Python)

如何在Python中下载大文件?

100天精通Python—第35天:json标准库大总结文末送书两本

Python的文件存储用哪个标准模块

python处理大文件的内存问题