[转载] Python中 hash去重

参考链接: Python hash()

现在有3000条数据,需要插入到数据库中去,使用的是对链接进行MD5加密, 

hashcode = md5(str(item_url)) 然后在数据库中设置 hashcode 为UNIQUE索引 

3000条数据全部插入完毕,耗时是32s 

不使用MD5加密,耗时30秒。(https://www.cnblogs.com/xuchunlin/p/8616604.html) 

结论:MD5加密去重对时间影响不大 

https://blog.csdn.net/Mao_code/article/details/53976511 

https://blog.csdn.net/sangky/article/details/80931040 

https://www.aliyun.com/jiaocheng/445004.html 

https://www.cnblogs.com/renyuanjun/p/5562084.html 

https://blog.csdn.net/katrina1rani/article/details/80907910 

https://blog.csdn.net/yangczcsdn/article/details/81327091 

https://blog.csdn.net/idkevin/article/details/47444237(Python中巧用set做去重) 

http://outofmemory.cn/code-snippet/1191/Python-usage-hashlib-module-do-string-jiami 

python中的hashlib和base64加密模块使用实例(https://www.jb51.net/article/54631.htm) 

python学习之11 加密解密hashlib hashlib是python专门用来加密解密的库,有md5, sha1, sha224, sha256, sha384, sha512。  Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。  什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。 

(https://blog.csdn.net/lyffly2011/article/details/50733830) 

函数 用于计算用户名和密码相加得到的加密值。 

def calc_md5(username, password):     md5 = hashlib.md5()     str_dd = username + password     md5.update(str_dd.encode('utf-8'))     return md5.hexdigest() 测试源码 import hashlib 

test_string = '123456' 

md5 = hashlib.md5() md5.update(test_string.encode('utf-8')) md5_encode = md5.hexdigest() print(md5_encode) 

sha1 = hashlib.sha1() sha1.update(test_string.encode('utf-8')) sha1_encode = sha1.hexdigest() print(sha1_encode) 输出结果为 e10adc3949ba59abbe56e057f20f883e  7c4a8d09ca3762af61e59520943dc26494f8941b   

  

过程是先把文件根据hash算法转为一个唯一的hash值再进行比较,可适用于图片,txt文件等比较 

import hashlib

password = 'password'

#以md5方式加密

hash = hashlib.md5(b'j#$%^&;FD')

# hash = hashlib.md5('password')

hash.update(password.encode('utf-8'))

haword = hash.hexdigest()

print(haword)

 

import sys

import hashlib

 

def md5sum(filename):

    file_object = open(filename, 'rb')

    file_content = file_object.read()

    file_object.close()

    file_md5 = hashlib.md5(file_content)

    return file_md5

 

if __name__ == "__main__":

    hash_text = md5sum('tt.txt')

    print(hash_text.hexdigest())

    print(len(hash_text.hexdigest())) 

注意,需要以二进制的方式读入文件,若写成hashlib.md5(filename),则会变成对字符串filename计算md5 

另外对较大文件进行校验,一次性读入太大内容,导致性能低下,故一般读取部分进行处理。 

# 大文件的MD5值 def getFileMd5(self, filename): 

if not os.path.isfile(filename): 

return myhash = hashlib.md5() 

f = file(filename, 'rb') 

while True: 

b = f.read(8096) 

if not b: 

break 

myhash.update(b) 

f.close() 

return myhash.hexdigest()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值