python计算Content-MD5并获取文件的Content-MD5值方式


Posted in Python onApril 03, 2020

1、首先计算MD5加密的二进制数组(128位),然后再对这个二进制数组进行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: 字节大小
  :return:
  """
  try:
    md5_1 = hashlib.md5() # 创建一个md5算法对象
    with open(file_path, 'rb') as f: # 打开一个文件,必须是'rb'模式打开
      while 1:
        data = f.read(Bytes) # 由于是一个文件,每次只读取固定字节
        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):
    # 循环文件
    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计算Content-MD5并获取文件的Content-MD5值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的rfind()方法使用详解
May 19 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
Python中类的初始化特殊方法
Dec 01 Python
python使用Tkinter实现在线音乐播放器
Jan 30 Python
python基础学习之如何对元组各个元素进行命名详解
Jul 12 Python
Python进度条的制作代码实例
Aug 31 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
PyQt5实现登录页面
May 30 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
python 调用Google翻译接口的方法
Dec 09 Python
Django自定义列表 models字段显示方式
Apr 03 #Python
使用Django清空数据库并重新生成
Apr 03 #Python
Python基础类继承重写实现原理解析
Apr 03 #Python
Django实现列表页商品数据返回教程
Apr 03 #Python
Python第三方库的几种安装方式(小结)
Apr 03 #Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 #Python
pip install 使用国内镜像的方法示例
Apr 03 #Python
You might like
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
文字幻灯片
2006/06/26 Javascript
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
javascript关于继承解析
2016/05/10 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
解读ES6中class关键字
2017/11/20 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
python实现udp聊天窗口
2020/03/31 Python
keras 读取多标签图像数据方式
2020/06/12 Python
Python pymsql模块的使用
2020/09/07 Python
德国运动营养和健身网上商店:Myprotein.de
2018/07/18 全球购物
机械工程师的岗位职责
2013/11/17 职场文书
职业技术学校毕业生推荐信
2013/12/03 职场文书
医务人员自我评价
2014/01/26 职场文书
校园活动宣传方案
2014/03/28 职场文书
2014年教师节寄语
2014/04/03 职场文书
小学英语课后反思
2014/04/26 职场文书
义和团口号
2014/06/17 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android