利用Python生成文件md5校验值函数的方法


Posted in Python onJanuary 10, 2017

前言

在linux有个命令叫做md5sum,能生成文件的md5值,一般情况下都会将结果记录到一个文件中用于校验使用,比如会这样使用:

[crazyant@localhost PythonMd5]$ more sample_file 
www.crazyant.net
www.51projob.com
[crazyant@localhost PythonMd5]$ md5sum sample_file > sample_file.md5file
[crazyant@localhost PythonMd5]$ more sample_file.md5file 
311d384505e3622ccf85d88930e2b0a0 sample_file
[crazyant@localhost PythonMd5]$ md5sum -c sample_file.md5file 
sample_file: OK

其中md5sum -c用于检测生成的md5值是否正确。

使用python生成文件md5值以及生成和md5sum结果一样的结果文件

python可以使用hashlib的md5模块对文件内容进行md5校验码生成,如果要生成和md5sum一样的结果文件,只需要将MD5结果值和文件名输出一行,中间有两个空格输出即可。

测试代码:

# -*- encoding:utf-8 -*-
from hashlib import md5
import os
 
def generate_file_md5value(fpath):
 '''以文件路径作为参数,返回对文件md5后的值
 '''
 m = md5()
 # 需要使用二进制格式读取文件内容
 a_file = open(fpath, 'rb') 
 m.update(a_file.read())
 a_file.close()
 return m.hexdigest()
 
def generate_file_md5sumFile(fpath):
 fname = os.path.basename(fpath)
 fpath_md5 = "%s.md5" % fpath
 fout = open(fpath_md5, "w")
 fout.write("%s %s\n" % (generate_file_md5value(fpath), fname.strip()))
 print "generate success, fpath:%s" % fpath_md5
 fout.flush()
 fout.close()
 
if __name__ == "__main__":
 fpath = "/home/users/workbench/PythonMd5/sample_file"
 # 测试一:以文件路径作为参数,获得md5后的字符串
 print generate_file_md5value(fpath)
 
 # 测试二:生成和linux命令:md5sum同样结果的.md5文件
 generate_file_md5sumFile(fpath)

运行结果:

[crazyant@localhost PythonMd5]$ python generateMd5file.py
311d384505e3622ccf85d88930e2b0a0
generate success, fpath:/home/crazyant/workbench/PythonMd5/sample_file.md5
[crazyant@localhost PythonMd5]$ md5sum -c sample_file.md5
sample_file: OK

注意点

在windows下开发的代码,如果直接提交到linux运行,经常因为windows下的换行符是\r\n而linux是\n的缘故导致代码执行失败,一般情况下都要进行一下转换。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python实现将不规范的英文名字首字母大写
Nov 15 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 Python
详解Python学习之安装pandas
Apr 16 Python
对python3中的RE(正则表达式)-详细总结
Jul 23 Python
Python使用进程Process模块管理资源
Mar 05 Python
python实现udp聊天窗口
Mar 31 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
基于Python爬取股票数据过程详解
Oct 21 Python
python中执行shell的两种方法总结
Jan 10 #Python
Python用list或dict字段模式读取文件的方法
Jan 10 #Python
python导入时小括号大作用
Jan 10 #Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 #Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 #Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 #Python
Python中的sort()方法使用基础教程
Jan 08 #Python
You might like
Look And Say 序列php实现代码
2011/05/22 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
PHP中iconv函数知识汇总
2015/07/02 PHP
php搜索文件程序分享
2015/10/30 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
js实现网页随机验证码
2020/10/19 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
Python爬虫代理IP池实现方法
2017/01/05 Python
Python实现的桶排序算法示例
2017/11/29 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
python实现决策树分类(2)
2018/08/30 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
中医专业职业生涯规划书范文
2014/01/04 职场文书
致100米运动员广播稿
2014/02/14 职场文书
幼儿园评语大全
2014/04/17 职场文书
求职信范文大全
2014/05/26 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL
Redis过期数据是否会被立马删除
2022/07/23 Redis