擅长:python、mysql、java
<p>为了正确有效地计算文件的哈希值(在Python 3中):</p>
<ul>
<li>以二进制模式打开文件(即在文件模式中添加<code>'b'</code>),以避免字符编码和行尾转换问题。</li>
<li>不要把完整的文件读入内存,因为那是浪费内存。相反,按顺序逐块读取并更新每个块的散列。</li>
<li>消除双缓冲,即不使用缓冲IO,因为我们已经使用了最佳块大小。</li>
<li>使用<code>readinto()</code>避免缓冲区搅动。</li>
</ul>
<p>示例:</p>
<pre><code>import hashlib
def sha256sum(filename):
h = hashlib.sha256()
b = bytearray(128*1024)
mv = memoryview(b)
with open(filename, 'rb', buffering=0) as f:
for n in iter(lambda : f.readinto(mv), 0):
h.update(mv[:n])
return h.hexdigest()
</code></pre>