gpt4 book ai didi

python - 在 Python 3 中使用 hashlib 计算文件的 md5 摘要

转载 作者:IT老高 更新时间:2023-10-28 20:38:24 25 4
gpt4 key购买 nike

在 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)。这种行为是否在某处解释过?

最佳答案

我认为您希望 for 循环连续调用 f.read(128)。这可以使用 iter()functools.partial() 来完成:

import hashlib
from functools import partial

def md5sum(filename):
with open(filename, mode='rb') as f:
d = hashlib.md5()
for buf in iter(partial(f.read, 128), b''):
d.update(buf)
return d.hexdigest()

print(md5sum('utils.py'))

关于python - 在 Python 3 中使用 hashlib 计算文件的 md5 摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com