python計算Content-MD5并獲取文件的Content-MD5值方式
1、首先計算MD5加密的二進(jìn)制數(shù)組(128位),然后再對這個二進(jìn)制數(shù)組進(jìn)行base64編碼(而不是對32位字符串編碼)。
例如,用Python計算0123456789的Content-MD5,主要代碼如下:
import base64, hashlib
hash = hashlib.md5()
hash.update("0123456789")
base64.b64encode(hash.digest())
這樣就生成了 'eB5eJF1ptWaXm4bijSPyxw==' 的Content-MD5值
2、接著,實(shí)際上如何獲取文件的Content-MD5值呢,下面有兩種不同的寫法,建議用第一種,不知道為啥實(shí)際調(diào)試的時候,用第一種可以的時候,用第二種不可以,因?yàn)槭遣煌藢懙拇a,估計調(diào)用的時候方式不一樣:
(1)、第一種寫法
import hashlib, base64
def content_encoding(path: str):
"""
文件轉(zhuǎn) bytes 加密并使用 base64 編碼
:param path: 文件路徑
:return: 返回加密編碼后的字符串
"""
with open(path, 'rb') as f:
content = f.read()
content_md5 = hashlib.md5()
content_md5.update(content)
content_base64 = base64.b64encode(content_md5.digest())
return content_base64.decode("utf-8")
(2)、第二種寫法:
import hashlib, base64
def match(file_path, Bytes=1024):
"""
先計算文件md5值,在對該md5值進(jìn)行base64編碼
:param file_path: 文件路徑
:param Bytes: 字節(jié)大小
:return:
"""
try:
md5_1 = hashlib.md5() # 創(chuàng)建一個md5算法對象
with open(file_path, 'rb') as f: # 打開一個文件,必須是'rb'模式打開
while 1:
data = f.read(Bytes) # 由于是一個文件,每次只讀取固定字節(jié)
if data: # 當(dāng)讀取內(nèi)容不為空時對讀取內(nèi)容進(jìn)行update
md5_1.update(data)
else: # 當(dāng)整個文件讀完之后停止update
break
f.close()
ret = base64.b64encode(bytes(md5_1.digest())) # 獲取這個文件的MD5值
ret = ret.decode('ascii') # 去掉前面的b'
return ret
except Exception as e:
print(e)
return ''
補(bǔ)充知識:Python之文件處理-批量修改md文檔內(nèi)容
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import re
import time
def modify_md_content(top):
for root, dirs, files in os.walk(top, topdown=False):
# 循環(huán)文件
for file_name in files:
file_name_split = file_name.split('.')
try:
if file_name_split[-1] == 'md':
# 找到md文件并且復(fù)制一份md文件路徑
md_file_path = os.path.join(root, '.'.join(file_name_split))
copy_md_file_path = os.path.join(root, '.'.join([f'{file_name_split[0]}_copy', file_name_split[1]]))
# 打開md文件然后進(jìn)行替換
with open(md_file_path, 'r', encoding='utf8') as fr, \
open(copy_md_file_path, 'w', encoding='utf8') as fw:
data = fr.read()
# data = re.sub('\(/配圖/', '(配圖/', data)
# data = re.sub('<br>', '<br>\n', data)
# data = re.sub('<br>', '', data)
data = re.sub('^ #.*? ', '', data)
fw.write(data) # 新文件一次性寫入原文件內(nèi)容
# fw.flush()
# 刪除原文件
os.remove(md_file_path)
# 重命名新文件名為原文件名
os.rename(copy_md_file_path, md_file_path)
print(f'{md_file_path} done...')
time.sleep(0.5)
except FileNotFoundError as e:
print(e)
time.sleep(0.5)
if __name__ == '__main__':
top = r'/Users/mac/Desktop/'
modify_md_content(top)
以上這篇python計算Content-MD5并獲取文件的Content-MD5值方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 使用pandas實(shí)現(xiàn)查詢和統(tǒng)計示例詳解
這篇文章主要為大家介紹了Python 使用pandas實(shí)現(xiàn)查詢和統(tǒng)計示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
利用Python抓取網(wǎng)頁數(shù)據(jù)的多種方式與示例詳解
在數(shù)據(jù)科學(xué)和網(wǎng)絡(luò)爬蟲領(lǐng)域,網(wǎng)頁數(shù)據(jù)抓取是非常重要的一項(xiàng)技能,Python 是進(jìn)行網(wǎng)頁抓取的流行語言,因?yàn)樗鼡碛袕?qiáng)大的第三方庫,能夠簡化網(wǎng)頁解析和數(shù)據(jù)提取的過程,本篇文章將介紹幾種常見的網(wǎng)頁數(shù)據(jù)抓取方法,需要的朋友可以參考下2025-04-04
Python利用xlwings實(shí)現(xiàn)考勤表制作
2023-04-04
haskell實(shí)現(xiàn)多線程服務(wù)器實(shí)例代碼
這篇文章主要介紹了haskell實(shí)現(xiàn)的多線程服務(wù)器,大家參考使用吧2013-11-11
詳解Python中的內(nèi)建函數(shù),可迭代對象,迭代器
這篇文章主要介紹了Python內(nèi)建函數(shù),可迭代對象,迭代器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
YOLOv5車牌識別實(shí)戰(zhàn)教程(一)引言與準(zhǔn)備工作
這篇文章主要介紹了YOLOv5車牌識別實(shí)戰(zhàn)教程(一)引言與準(zhǔn)備工作,在這個教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識別,幫助你快速掌握YOLOv5車牌識別技能,需要的朋友可以參考下2023-04-04

