去掉重复的文件

MD5和SHA-1 算法来哈希文件比较常用,它们非常快,并且可以用它们来鉴别文件,它们是根据文件内容来鉴别,并不是文件的名字。

python hash MD5

注:使用python 高于2.7版本,包括3.x版本

import hashlib

hasher = hashlib.md5()
with open('myfile.jpg', 'rb') as afile:
    buf = afile.read()
    hasher.update(buf)
print(hasher.hexdigest())

使用rb模式打开文件,因为MD5方法是使用字节串的方式读取文件的,这样一来可以hash任何文件,不仅仅是文本文件

注意:这里的读取方法,像前面代码这样,当没有其他参数时,它是将所有的内容读入内存,如果不确定文件的大小,这很危险。

MD5 hash大的文件

import hashlib
BLOCKSIZE = 65536
hasher = hashlib.md5()
with open('anotherfile.txt', 'rb') as afile:
    buf = afile.read(BLOCKSIZE)
    while len(buf) > 0:
        hasher.update(buf)
        buf = afile.read(BLOCKSIZE)
print(hasher.hexdigest())

如果不想用MD5,可以换成其他算法,如:SHA1:

import hashlib
BLOCKSIZE = 65536
hasher = hashlib.sha1()
with open('anotherfile.txt', 'rb') as afile:
    buf = afile.read(BLOCKSIZE)
    while len(buf) > 0:
        hasher.update(buf)
        buf = afile.read(BLOCKSIZE)
print(hasher.hexdigest())

查看支持的算法: hashlib.algorithms_available. (3.2 以上版本有效).

最后封装成方法

import hashlib
def md5Checksum(filePath):    
    with open(filePath, 'rb') as fh:
        m = hashlib.md5()        
        while True:
            data = fh.read(8192)
            if not data:                
                break
             m.update(data)        
    return m.hexdigest()
print('The MD5 checksum of text.txt is', md5Checksum('test.txt'))

资源链接:
http://joelverhagen.com/blog/2011/02/md5-hash-of-file-in-python/
http://www.pythoncentral.io/hashing-files-with-python/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值