1、背景:
网络爬虫下载的文件,需要去重,选择python 的hashlib 或者md5计算hash值去重
2、实测:
一般对文件计算md5采用的方法是使用命令行
md5sum path/filename
python中试下那类似功能的时使用md5(python 2.5之前和hashlib(python2.5之后)
最简单的实现:
#!/usr/bin/env python
#coding : utf-8
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__":
file_md5 = md5sum(sys.argv[1])
print file_md5.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()
每次读取8096字节的内容,使用myhash.update(b)进行累计。