Python利用hashlib實(shí)現(xiàn)文件MD5碼的批量存儲(chǔ)
簡(jiǎn)介
可以考慮以下幾個(gè)可能的應(yīng)用:
- 如果你需要對(duì)文件進(jìn)行校驗(yàn)或驗(yàn)證,你可以使用MD5碼來檢查文件是否被篡改或損壞。
- 如果你需要對(duì)文件進(jìn)行分類或去重,你可以使用MD5碼來標(biāo)識(shí)文件的唯一性或相似性。
- 如果你需要對(duì)文件進(jìn)行存儲(chǔ)或傳輸,你可以使用Access數(shù)據(jù)庫來管理文件的路徑和MD5碼。
基于這些應(yīng)用,我為你舉了以下幾個(gè)具體的場(chǎng)景:
你是一個(gè)軟件開發(fā)者,你需要發(fā)布一個(gè)安裝包給用戶下載。為了保證安裝包的完整性和安全性,你可以使用剛剛一段代碼來生成安裝包的MD5碼,并將其存儲(chǔ)在Access數(shù)據(jù)庫中。當(dāng)用戶下載完安裝包后,他們可以通過比較自己計(jì)算的MD5碼和數(shù)據(jù)庫中的MD5碼來確認(rèn)安裝包是否正確無誤。
你是一個(gè)數(shù)據(jù)分析師,你需要處理大量的數(shù)據(jù)文件。為了避免重復(fù)或錯(cuò)誤的數(shù)據(jù)文件,你可以使用剛剛一段代碼來生成每個(gè)數(shù)據(jù)文件的MD5碼,并將其存儲(chǔ)在Access數(shù)據(jù)庫中。當(dāng)你需要查詢或分析某個(gè)數(shù)據(jù)文件時(shí),你可以通過查找數(shù)據(jù)庫中的MD5碼來快速定位到相應(yīng)的數(shù)據(jù)文件。
你是一個(gè)網(wǎng)絡(luò)管理員,你需要備份服務(wù)器上的重要文件。為了節(jié)省空間和時(shí)間,你可以使用剛剛一段代碼來生成每個(gè)重要文件的MD5碼,并將其存儲(chǔ)在Access數(shù)據(jù)庫中。當(dāng)你需要恢復(fù)某個(gè)重要文件時(shí),你可以通過比較服務(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)前文件夾下的所有文件,計(jì)算每個(gè)文件的MD5碼,并將文件路徑和MD5碼存儲(chǔ)在Access數(shù)據(jù)庫中。具體來說,這段代碼做了以下幾件事:
- 導(dǎo)入os、hashlib和pyodbc三個(gè)模塊,分別用于操作系統(tǒng)、哈希算法和數(shù)據(jù)庫連接。
- 使用pyodbc.connect函數(shù)連接到Access數(shù)據(jù)庫,指定驅(qū)動(dòng)程序和數(shù)據(jù)庫文件名。
- 創(chuàng)建一個(gè)cursor對(duì)象,用于執(zhí)行SQL語句。
- 使用os.listdir函數(shù)獲取當(dāng)前文件夾下的所有文件名。
- 使用一個(gè)for循環(huán)遍歷每個(gè)文件名。
- 使用os.path.isdir函數(shù)判斷是否是子目錄,如果是則跳過。
- 使用os.path.abspath函數(shù)獲取完整的文件路徑。
- 創(chuàng)建一個(gè)md5_hash對(duì)象,用于生成MD5碼。
- 使用open函數(shù)以二進(jìn)制模式打開文件,并使用一個(gè)for循環(huán)讀取每個(gè)4096字節(jié)的數(shù)據(jù)塊。
- 使用md5_hash.update函數(shù)更新MD5碼的計(jì)算狀態(tài)。
- 使用md5_hash.hexdigest函數(shù)獲取最終的MD5碼值(十六進(jìn)制字符串)。
- 使用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實(shí)現(xiàn)文件MD5碼的批量存儲(chǔ)的文章就介紹到這了,更多相關(guān)Python hashlib存儲(chǔ)文件MD5碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何解決.cuda()加載用時(shí)很長(zhǎng)的問題
這篇文章主要介紹了如何解決.cuda()加載用時(shí)很長(zhǎng)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
python GUI庫圖形界面開發(fā)之PyQt5表格控件QTableView詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5表格控件QTableView詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-03-03
詳談Python 窗體(tkinter)表格數(shù)據(jù)(Treeview)
今天小編就為大家分享一篇詳談Python 窗體(tkinter)表格數(shù)據(jù)(Treeview),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
python用plt畫圖時(shí),cmp設(shè)置方法
今天小編就為大家分享一篇python用plt畫圖時(shí),cmp設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python Locust負(fù)載測(cè)試工具安裝配置使用詳解
本文將提供有關(guān)Python Locust的全面指南,包括安裝和配置、基本概念、性能測(cè)試、任務(wù)編寫、報(bào)告生成以及實(shí)際應(yīng)用場(chǎng)景,將通過豐富的示例代碼來幫助深入理解Locust的使用2024-01-01
如何使用python爬取知乎熱榜Top50數(shù)據(jù)
主要是爬取知乎熱榜的問題及點(diǎn)贊數(shù)比較高的答案,通過requests請(qǐng)求庫進(jìn)行爬取,對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-09-09

