python使用MD5计算比较两个文件夹下相同文件

 查看两个文件是否是同一文件,很好地方法就是计算其md5的值,然后比较是否相同。

#-*- coding:utf-8 -*-
import os
import timeit
import multiprocessing
import hashlib


def getHash(f):
    # line=f.readline()
    md5_hash = hashlib.md5()
    while True:
        # md5_hash.update(line)                                、
        # line=f.readline()
        content = f.read(1024)
        if not content:
            break
        md5_hash.update(content)
    return md5_hash.hexdigest()


def readFilename(path, allfile):
    filelist = os.listdir(path)

    for filename in filelist:
        filepath = os.path.join(path, filename)
        #filepath=unicode(filepath,"utf-8")

        if os.path.isdir(filepath):
            readFilename(filepath, allfile)
        else:
            allfile.append(filepath)

    return allfile


def begin():
    ff1 = "C:\Users\zgd\Desktop\zgddgz"
    ff2 = "C:\Users\zgd\Desktop\gdzhang"
    allJPG1=[]
    allJPG1=readFilename(ff1, allJPG1)
    # print allJPG1

    allJPG2=[]
    allJPG2=readFilename(ff2, allJPG2)
    # print allJPG2

    count=0
    for a1 in allJPG1:
        for b1 in allJPG2:
            # print a1,b1
            with open(a1, 'r') as f1, open(b1, 'r') as f2:
                m1 = getHash(f1)
                # print m1
                m2 = getHash(f2)
                # print m2

            if m1 == m2:
                count=count+1
                print count
                print "%s = %s"% (a1,b1)

                filepath= 'C:\Users\zgd\Desktop\zhangniu\Link.txt'
                # filepath = 'H:\\RINS1000\\' + 'Link.txt'
                with open(filepath,'a') as fp:
                    fp.write(a1+"\t\t")
                    fp.write(b1.split("\\")[-1] +"\n")

                fp.close()
            f1.close()
            f2.close()

if __name__ == '__main__':
    start = timeit.default_timer()

    pool = multiprocessing.Pool(32)
    pool.apply(func = begin)
    pool.close()
    pool.join()

    end = timeit.default_timer()
    print str(end - start)

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值