溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么計算MD5并獲取文件的值

發(fā)布時間:2021-03-11 16:54:25 來源:億速云 閱讀:389 作者:TREX 欄目:開發(fā)技術

這篇文章主要講解了“python怎么計算MD5并獲取文件的值”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python怎么計算MD5并獲取文件的值”吧!

1、首先計算MD5加密的二進制數(shù)組(128位),然后再對這個二進制數(shù)組進行base64編碼(而不是對32位字符串編碼)。

例如,用Python計算0123456789的Content-MD5,主要代碼如下:

import base64, hashlib
hash = hashlib.md5()
hash.update("0123456789")
base64.b64encode(hash.digest())

這樣就生成了 'eB5eJF1ptWaXm4bijSPyxw==' 的Content-MD5值

2、接著,實際上如何獲取文件的Content-MD5值呢,下面有兩種不同的寫法,建議用第一種,不知道為啥實際調試的時候,用第一種可以的時候,用第二種不可以,因為是不同人寫的代碼,估計調用的時候方式不一樣:

(1)、第一種寫法

import hashlib, base64
 
def content_encoding(path: str):
  """
  文件轉 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值進行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: # 當讀取內容不為空時對讀取內容進行update
          md5_1.update(data)
        else: # 當整個文件讀完之后停止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 ''

補充知識:Python之文件處理-批量修改md文檔內容

#!/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文件并且復制一份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文件然后進行替換
          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) # 新文件一次性寫入原文件內容
            # 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怎么計算MD5并獲取文件的值”的內容了,經(jīng)過本文的學習后,相信大家對python怎么計算MD5并獲取文件的值這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI