」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在Python中散列大檔案而不消耗記憶體?

如何在Python中散列大檔案而不消耗記憶體?

發佈於2024-11-06
瀏覽:637

How to Hash Large Files in Python without Memory Overconsumption?

在Python中計算大檔案的MD5雜湊值

Python的hashlib模組為計算加密雜湊值提供了一個方便的接口。然而,對於大小超過系統記憶體的特別大的文件,直接使用 hashlib 可能會出現問題。

解決方案:漸進式哈希

為了解決這個問題,我們採用漸進式哈希通過以可管理的區塊讀取檔案。這種方法可確保對整個檔案內容進行哈希處理,而不會消耗過多的記憶體。以下是實作此技術的範例 Python 函數:

import hashlib

def md5_for_file(f):
    block_size = 2**20
    md5 = hashlib.md5()
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    return md5.digest()

要計算大檔案的MD5 雜湊值,您可以如下呼叫函數:

with open("filename", "rb") as f:
    md5 = md5_for_file(f)

檔案模式註意事項

確保使用「rb」以二進位模式開啟檔案以獲得準確結果。使用“r”可能會導致計算不正確。

其他注意事項

為了方便起見,下面介紹了該函數的改進版本:

import hashlib
import os

def generate_file_md5(rootdir, filename):
    m = hashlib.md5()
    with open(os.path.join(rootdir, filename), "rb") as f:
        buf = f.read()
        while buf:
            m.update(buf)
            buf = f.read()
    return m.hexdigest()

建議使用 jacksum 等外部工具交叉檢查計算出的雜湊值以驗證準確性。

版本聲明 本文轉載於:1729388119如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3