使用 python 2.7,以下代码计算文件内容的 mD5 hexdigest。
(编辑:嗯,不是真的如答案所示,我只是这么认为)。
import hashlib
def md5sum(filename):
f = open(filename, mode='rb')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf)
return d.hexdigest()
现在,如果我使用 python3 运行该代码,它会引发 TypeError 异常:
d.update(buf)
TypeError: object supporting the buffer API required
我发现我可以让 python2 和 python3 都运行该代码,将其更改为:
def md5sum(filename):
f = open(filename, mode='r')
d = hashlib.md5()
for buf in f.read(128):
d.update(buf.encode())
return d.hexdigest()
现在我仍然想知道为什么原始代码停止工作。似乎当使用二进制模式修饰符打开文件时,它返回整数而不是编码为字节的字符串(我这么说是因为 type(buf) 返回 int)。这种行为在某处有解释吗?