Python利用hashlib實現(xiàn)文件MD5碼的批量存儲
簡介
可以考慮以下幾個可能的應(yīng)用:
- 如果你需要對文件進行校驗或驗證,你可以使用MD5碼來檢查文件是否被篡改或損壞。
- 如果你需要對文件進行分類或去重,你可以使用MD5碼來標(biāo)識文件的唯一性或相似性。
- 如果你需要對文件進行存儲或傳輸,你可以使用Access數(shù)據(jù)庫來管理文件的路徑和MD5碼。
基于這些應(yīng)用,我為你舉了以下幾個具體的場景:
你是一個軟件開發(fā)者,你需要發(fā)布一個安裝包給用戶下載。為了保證安裝包的完整性和安全性,你可以使用剛剛一段代碼來生成安裝包的MD5碼,并將其存儲在Access數(shù)據(jù)庫中。當(dāng)用戶下載完安裝包后,他們可以通過比較自己計算的MD5碼和數(shù)據(jù)庫中的MD5碼來確認安裝包是否正確無誤。
你是一個數(shù)據(jù)分析師,你需要處理大量的數(shù)據(jù)文件。為了避免重復(fù)或錯誤的數(shù)據(jù)文件,你可以使用剛剛一段代碼來生成每個數(shù)據(jù)文件的MD5碼,并將其存儲在Access數(shù)據(jù)庫中。當(dāng)你需要查詢或分析某個數(shù)據(jù)文件時,你可以通過查找數(shù)據(jù)庫中的MD5碼來快速定位到相應(yīng)的數(shù)據(jù)文件。
你是一個網(wǎng)絡(luò)管理員,你需要備份服務(wù)器上的重要文件。為了節(jié)省空間和時間,你可以使用剛剛一段代碼來生成每個重要文件的MD5碼,并將其存儲在Access數(shù)據(jù)庫中。當(dāng)你需要恢復(fù)某個重要文件時,你可以通過比較服務(wù)器上和備份設(shè)備上的MD5碼來確定哪些文件需要更新或覆蓋。
源代碼
import os
import hashlib
import pyodbc
# Connect to the Access database
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=./stocks.accdb;')
# conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=stocks.accdb;')
cursor = conn.cursor()
# Iterate over all files in the current folder
for file in os.listdir("."):
# Skip subdirectories
if os.path.isdir(file):
continue
# Get the full file path
file_path = os.path.abspath(file)
# Generate the md5 hash of the file content
md5_hash = hashlib.md5()
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
md5_hash.update(chunk)
md5_hex = md5_hash.hexdigest()
# Insert the file path and md5 hash into the database table
cursor.execute("INSERT INTO filemd (filepath, md5) VALUES (?, ?)", (file_path, md5_hex))
# Commit and close the connection
conn.commit()
conn.close()源代碼說明
這段代碼的主要功能是遍歷當(dāng)前文件夾下的所有文件,計算每個文件的MD5碼,并將文件路徑和MD5碼存儲在Access數(shù)據(jù)庫中。具體來說,這段代碼做了以下幾件事:
- 導(dǎo)入os、hashlib和pyodbc三個模塊,分別用于操作系統(tǒng)、哈希算法和數(shù)據(jù)庫連接。
- 使用pyodbc.connect函數(shù)連接到Access數(shù)據(jù)庫,指定驅(qū)動程序和數(shù)據(jù)庫文件名。
- 創(chuàng)建一個cursor對象,用于執(zhí)行SQL語句。
- 使用os.listdir函數(shù)獲取當(dāng)前文件夾下的所有文件名。
- 使用一個for循環(huán)遍歷每個文件名。
- 使用os.path.isdir函數(shù)判斷是否是子目錄,如果是則跳過。
- 使用os.path.abspath函數(shù)獲取完整的文件路徑。
- 創(chuàng)建一個md5_hash對象,用于生成MD5碼。
- 使用open函數(shù)以二進制模式打開文件,并使用一個for循環(huán)讀取每個4096字節(jié)的數(shù)據(jù)塊。
- 使用md5_hash.update函數(shù)更新MD5碼的計算狀態(tài)。
- 使用md5_hash.hexdigest函數(shù)獲取最終的MD5碼值(十六進制字符串)。
- 使用cursor.execute函數(shù)執(zhí)行SQL語句,將文件路徑和MD5碼插入到filemd表中(如果表不存在,則先創(chuàng)建)。
- 使用conn.commit函數(shù)提交事務(wù),將數(shù)據(jù)保存到數(shù)據(jù)庫中。
- 使用conn.close函數(shù)關(guān)閉數(shù)據(jù)庫連接。
效果如下所示

到此這篇關(guān)于Python利用hashlib實現(xiàn)文件MD5碼的批量存儲的文章就介紹到這了,更多相關(guān)Python hashlib存儲文件MD5碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python根據(jù)字典的值查詢出對應(yīng)的鍵的方法
這篇文章主要介紹了Python根據(jù)字典的值查詢出對應(yīng)的鍵的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
淺析Python語言自帶的數(shù)據(jù)結(jié)構(gòu)有哪些
Python已經(jīng)廣泛的應(yīng)用于數(shù)據(jù)分析、數(shù)據(jù)挖掘、機器學(xué)習(xí)等眾多科學(xué)計算領(lǐng)域,這篇文章主要介紹了Python語言自帶的數(shù)據(jù)結(jié)構(gòu)有哪些?需要的朋友可以參考下2019-08-08
Python報錯SyntaxError:unexpected?EOF?while?parsing的解決辦法
在運行或編寫一個程序時常會遇到錯誤異常,這時python會給你一個錯誤提示類名,告訴出現(xiàn)了什么樣的問題,下面這篇文章主要給大家介紹了關(guān)于Python報錯SyntaxError:unexpected?EOF?while?parsing的解決辦法,需要的朋友可以參考下2022-07-07
python 通過手機號識別出對應(yīng)的微信性別(實例代碼)
這篇文章主要介紹了python 通過手機號識別出對應(yīng)的微信性別,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12

