Python的hashlib庫獲取超大文件的md5值實例探究
Python hashlib獲取文件md5值
不知道大家在工作中有沒有涉及到超大文件的讀取,在處理超大文件時,如果直接將整個文件讀到內(nèi)存,然后再計算MD5值可能會占用大量內(nèi)存,嚴重的情況下可能會導(dǎo)致系統(tǒng)故障。
為了減輕系統(tǒng)內(nèi)存壓力,我們通常采取分塊讀取文件內(nèi)容的方式來計算MD5。
Python的hashlib庫,它支持將大文件分塊讀取并計算MD5值,從而避免一次性加載整個文件到內(nèi)存中。
import hashlib
import os
def get_file_md5(file_path, block_size=2 ** 20): # 默認塊大小為1MB
md5_hash = hashlib.md5()
with open(file_path, "rb") as f:
while True:
data = f.read(block_size)
if not data:
break
md5_hash.update(data)
return md5_hash.hexdigest()
# 使用方法
file_path_large_file = r"E:\xxxxxxx\Win10_64位專業(yè)版本.ISO"
md5_value = get_file_md5(file_path_large_file)
print(f"大文件的大小是:{os.path.getsize(file_path_large_file)/1024/1024/1024:.2f}GB")
print(f"大文件的MD5值是:{md5_value}") 測試5.42G操作系統(tǒng)文件
我自己找了一個5.42G操作系統(tǒng)文件來測試了下,運行過程計算機內(nèi)存的使用率并沒有明顯增加,表現(xiàn)很平穩(wěn)。


內(nèi)存利用率變化
可能大家看到這里不能明顯感受到分塊讀取文件和一次性將大文件讀入內(nèi)存的差異,我下面的函數(shù)去掉了分塊讀取的設(shè)置,我們再來看下內(nèi)存利用率的變化
def get_file_md52(file_path): # 這里去掉了塊大小的設(shè)置
md5_hash = hashlib.md5()
with open(file_path, "rb") as f:
while True:
data = f.read() # 這里是一次性將文件讀入內(nèi)存
if not data:
break
md5_hash.update(data)
return md5_hash.hexdigest()
# 使用方法
file_path_large_file = r"E:\xxxxxx\Win10_64位專業(yè)版本.ISO"
md5_value = get_file_md52(file_path_large_file)
print(f"大文件的大小是:{os.path.getsize(file_path_large_file)/1024/1024/1024:.2f}GB")
print(f"大文件的MD5值是:{md5_value}")

通過上面的內(nèi)存利用率截圖,我們可以看到如果不設(shè)置分塊讀取,內(nèi)存利用率會明顯升高,在工作中這種操作會存在較大風險,所以,各位同學(xué)應(yīng)該盡量避免這種操作方式。
當然了,分塊讀取超大文件的操作,不僅適用于計算md5值,同樣可以用在其他讀取文件內(nèi)容的場景。希望各位同學(xué)可以靈活使用。
以上就是Python的hashlib庫獲取超大文件的md5值實例探究的詳細內(nèi)容,更多關(guān)于Python hashlib獲取文件md5值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
學(xué)生如何免費使用Pycharm專業(yè)版學(xué)生認證教程
這篇文章主要介紹了學(xué)生如何免費使用Pycharm專業(yè)版,學(xué)生認證教程,有了這個教程在校期間就可以免費使用Pycharm,簡直是學(xué)生黨的福音,快來一起看看吧2023-03-03
Python字典數(shù)據(jù)對象拆分的簡單實現(xiàn)方法
這篇文章主要介紹了Python字典數(shù)據(jù)對象拆分的簡單實現(xiàn)方法,涉及Python針對字典數(shù)據(jù)的相關(guān)遍歷、拆分等操作技巧,需要的朋友可以參考下2017-12-12
Python使用PDFMiner.six解析PDF數(shù)據(jù)詳解
PDFMiner.six 是基于 PDFMiner 項目開發(fā)的增強版,用于從PDF文檔中提取文本和結(jié)構(gòu)信息,下面我們就來學(xué)習(xí)一下如何使用PDFMiner.six解析PDF數(shù)據(jù)吧2025-03-03
Python中消息訂閱應(yīng)用開發(fā)的最優(yōu)5個方案及代碼實現(xiàn)
消息訂閱是現(xiàn)代分布式系統(tǒng)中實現(xiàn)異步通信和解耦的核心技術(shù)之一,本文將為大家詳細介紹一下5種最優(yōu)的消息訂閱方案,感興趣的小伙伴可以了解下2025-03-03
如何解決requests,已經(jīng)安裝卻無法import問題
這篇文章主要介紹了如何解決requests,已經(jīng)安裝卻無法import問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
在Python中畫圖(基于Jupyter notebook的魔法函數(shù))
這篇文章主要介紹了在Python中畫圖(基于Jupyter notebook的魔法函數(shù)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10
使用Python將Mysql的查詢數(shù)據(jù)導(dǎo)出到文件的方法
今天小編就為大家分享一篇關(guān)于使用Python將Mysql的查詢數(shù)據(jù)導(dǎo)出到文件的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
詳解在Python的Django框架中創(chuàng)建模板庫的方法
這篇文章主要介紹了在Python的Django框架中創(chuàng)建模板庫的方法,模版庫通常用來管理單獨的Django中的應(yīng)用,需要的朋友可以參考下2015-07-07

