当我们想要在Python中获取大文件的哈希值时,使用Python的hashlib
,我们可以处理大小为1024字节的数据块,如下所示:
import hashlib
m = hashlib.md5()
chunksize = 1024
with open("large.txt", 'rb') as f:
while True:
chunk = f.read(chunksize)
if not chunk:
break
m.update(chunk)
print(m.hexdigest())
或者干脆忽略分块,如下所示:
import hashlib
sha256 = hashlib.sha256()
with open(f, 'rb') as g:
sha256.update(g.read())
print(sha256.hexdigest())
找到一个最佳的实现可能很棘手,需要一些性能测试和改进(1024个块?4KB?64KB?等等),如Hashing file in Python 3?或Getting a hash string for a very large file 中所述
问题:是否有跨平台、随时可用的函数,可以使用Python计算大文件的MD5或SHA256?(这样我们就不需要重新发明轮子,也不需要担心最佳块大小等。)
比如:
import hashlib
# get the result without having to think about chunks, etc.
hashlib.file_sha256('bigfile.txt')
你确定你真的需要优化它吗?我做了一些分析,在我的计算机上,当chunksize不小到可笑的程度时,没有什么好处:
其中打印:
这意味着你可以选择一个大的,但不是疯狂的块大小。e、 g.1 MB
为您的用例创建了一个包^{} ,该包只使用subprocess调用macOS/Linux的
openssl
和Windows的CertUtil
,并仅从输出中提取摘要Simple File Checksum
[source]
返回文件的MD5、SHA1、SHA256、SHA384或SHA512校验和
安装
运行以下命令以安装:
用法
Python:
终端:
相关问题 更多 >
编程相关推荐