Python 3.5 中的 Hashlib MemoryError 但 2.7 中没有
Hashlib MemoryError in Python 3.5 but not in 2.7
我一直在将一组 Python 2.7 脚本移植到 Python 3.5,这样我就可以使用一些在 2.7 中不可用的库,但是我从中得到了 MemoryError之前有效的代码:
import hashlib, functools
sha2h = hashlib.sha256()
with open('/path/to/any/file', 'rb') as f:
[sha2h.update(chunk) for chunk in iter(functools.partial(f.read, 256), '')]
据我所知,这是获取文件 SHA256 哈希值的正确方法。我似乎无法找到有关此问题的任何信息。如果有帮助,这是当上面的代码是 shell:
中的 运行 时的回溯
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in <listcomp>
也试过更换
sha2h = hashlib.sha256()
和
sha2h = hashlib.new('sha256')
匹配 hashlib 的文档,但这不会产生任何结果变化。
任何帮助或见解将不胜感激!
在 Python 3 上,您需要将 b''
而不是 ''
设置为 iter
调用的标记值:
iter(functools.partial(f.read, 256), b'')
您也不应该像这样对副作用使用列表推导式,但如果您正在移植现有代码,那么最好暂时保留它。
我一直在将一组 Python 2.7 脚本移植到 Python 3.5,这样我就可以使用一些在 2.7 中不可用的库,但是我从中得到了 MemoryError之前有效的代码:
import hashlib, functools
sha2h = hashlib.sha256()
with open('/path/to/any/file', 'rb') as f:
[sha2h.update(chunk) for chunk in iter(functools.partial(f.read, 256), '')]
据我所知,这是获取文件 SHA256 哈希值的正确方法。我似乎无法找到有关此问题的任何信息。如果有帮助,这是当上面的代码是 shell:
中的 运行 时的回溯File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in <listcomp>
也试过更换
sha2h = hashlib.sha256()
和
sha2h = hashlib.new('sha256')
匹配 hashlib 的文档,但这不会产生任何结果变化。
任何帮助或见解将不胜感激!
在 Python 3 上,您需要将 b''
而不是 ''
设置为 iter
调用的标记值:
iter(functools.partial(f.read, 256), b'')
您也不应该像这样对副作用使用列表推导式,但如果您正在移植现有代码,那么最好暂时保留它。