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 linecache.getline()读取文件中特定一行的脚本
Sep 06 Python
Python3实现连接SQLite数据库的方法
Aug 23 Python
部署Python的框架下的web app的详细教程
Apr 30 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
Python排序搜索基本算法之选择排序实例分析
Dec 09 Python
在Python dataframe中出生日期转化为年龄的实现方法
Oct 20 Python
Python根据成绩分析系统浅析
Feb 11 Python
Django model update的多种用法介绍
Mar 28 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
Python插入Elasticsearch操作方法解析
Jan 19 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
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
小程序扫描普通链接二维码跳转小程序指定界面方法
2019/05/07 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
2020/07/17 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Python程序中操作MySQL的基本方法
2015/07/29 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
社区综治宣传月活动总结
2014/07/02 职场文书
加强作风建设心得体会
2014/10/22 职场文书
公司聚餐通知
2015/04/22 职场文书
公司年夜饭通知
2015/04/25 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL