在Python中獲取大文件的MD5哈希值我使用了hashlib(它取代了Python 2.6 / 3.0中的md5),如果我打開一個文件并將其內容放入hashlib.md5()函數中,它工作正常。問題在于非常大的文件,它們的大小可能超過RAM大小。如何在不將整個文件加載到內存的情況下獲取文件的MD5哈希值?
3 回答

紅顏莎娜
TA貢獻1842條經驗 獲得超13個贊
將文件分成128個字節的塊并連續使用它們將它們送到MD5 update()
。
這利用了MD5具有128字節摘要塊的事實?;旧?,當MD5 digest()
是文件時,這正是它正在做的事情。
如果確保在每次迭代時釋放內存(即不將整個文件讀取到內存中),則該內存不應超過128個字節。
一個例子是像這樣讀取塊:
f = open(fileName)while not endOfFile: f.read(128)

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
如果您關心更多pythonic(沒有'while True')閱讀文件的方式,請檢查以下代碼:
import hashlibdef checksum_md5(filename): md5 = hashlib.md5() with open(filename,'rb') as f: for chunk in iter(lambda: f.read(8192), b''): md5.update(chunk) return md5.digest()
請注意,iter()func需要一個空的字節字符串,以便返回的迭代器在EOF處停止,因為read()返回b''(不僅僅是'')。
添加回答
舉報
0/150
提交
取消