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()

猜你喜欢

转载自blog.csdn.net/baidu_32542573/article/details/83686208
今日推荐