Python利用hashlib實(shí)現(xiàn)文件MD5碼的批量存儲(chǔ)
簡介
可以考慮以下幾個(gè)可能的應(yīng)用:
- 如果你需要對文件進(jìn)行校驗(yàn)或驗(yàn)證,你可以使用MD5碼來檢查文件是否被篡改或損壞。
- 如果你需要對文件進(jìn)行分類或去重,你可以使用MD5碼來標(biāo)識文件的唯一性或相似性。
- 如果你需要對文件進(jìn)行存儲(chǔ)或傳輸,你可以使用Access數(shù)據(jù)庫來管理文件的路徑和MD5碼。
基于這些應(yīng)用,我為你舉了以下幾個(gè)具體的場景:
你是一個(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對象,用于執(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對象,用于生成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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python根據(jù)字典的值查詢出對應(yīng)的鍵的方法
這篇文章主要介紹了Python根據(jù)字典的值查詢出對應(yīng)的鍵的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09淺析Python語言自帶的數(shù)據(jù)結(jié)構(gòu)有哪些
Python已經(jīng)廣泛的應(yīng)用于數(shù)據(jù)分析、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)等眾多科學(xué)計(jì)算領(lǐng)域,這篇文章主要介紹了Python語言自帶的數(shù)據(jù)結(jié)構(gòu)有哪些?需要的朋友可以參考下2019-08-08Python報(bào)錯(cuò)SyntaxError:unexpected?EOF?while?parsing的解決辦法
在運(yùn)行或編寫一個(gè)程序時(shí)常會(huì)遇到錯(cuò)誤異常,這時(shí)python會(huì)給你一個(gè)錯(cuò)誤提示類名,告訴出現(xiàn)了什么樣的問題,下面這篇文章主要給大家介紹了關(guān)于Python報(bào)錯(cuò)SyntaxError:unexpected?EOF?while?parsing的解決辦法,需要的朋友可以參考下2022-07-07Python實(shí)現(xiàn)遍歷目錄的方法【測試可用】
這篇文章主要介紹了Python實(shí)現(xiàn)遍歷目錄的方法,涉及Python針對目錄與文件的遍歷、判斷、讀取相關(guān)操作技巧,需要的朋友可以參考下2017-03-03python 通過手機(jī)號識別出對應(yīng)的微信性別(實(shí)例代碼)
這篇文章主要介紹了python 通過手機(jī)號識別出對應(yīng)的微信性別,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12python搜索指定類型文件以及批量移動(dòng)文件程序詳解
這篇文章主要給大家介紹了關(guān)于python搜索指定類型文件以及批量移動(dòng)文件程序的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03Python實(shí)現(xiàn)GIF動(dòng)圖加載和降幀的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python和Pygame實(shí)現(xiàn)GIF動(dòng)圖加載和降幀的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-02-02