我一直在将一组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的文档,但结果没有变化。
非常感谢任何帮助或见解!
答案 0 :(得分:0)
在Python 3上,您需要设置b''
而不是''
作为iter
调用的标记值:
iter(functools.partial(f.read, 256), b'')
你也不应该对这样的副作用使用列表理解,但是如果你移植现有的代码,那么最好暂时离开它。