您需要以合适大小的块读取文件:def md5_for_file(f, block_size=2**20):
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
注意:确保打开文件时将“rb”打开 - 否则会得到错误的结果。
所以要用一种方法完成所有操作 - 使用类似的东西:def generate_file_md5(rootdir, filename, blocksize=2**20):
m = hashlib.md5()
with open( os.path.join(rootdir, filename) , "rb" ) as f:
while True:
buf = f.read(blocksize)
if not buf:
break
m.update( buf )
return m.hexdigest()
上面的更新是基于Frerich Raabe提供的评论 - 我测试了这一点并发现它在我的Python 2.7.2 Windows安装上是正确的
我使用'jacksum'工具交叉检查结果。jacksum -a md5