利用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 collections模块实例讲解
Apr 07 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python中decorator使用实例
Apr 14 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
Python pickle模块常用方法代码实例
Oct 10 Python
Python修改DBF文件指定列
Dec 19 Python
python中redis包操作数据库的教程
Apr 19 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
PHP邮件专题
2006/10/09 PHP
PHP聊天室技术
2006/10/09 PHP
yii上传文件或图片实例
2014/04/01 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
PHP文件操作方法汇总
2015/07/01 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
php中上传文件的的解决方案
2018/09/25 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
img的onload的另类用法
2008/01/10 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
通过cmd进入python的步骤
2020/06/16 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
毕业生就业协议书
2014/04/11 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
住房租房协议书
2014/08/20 职场文书
法定代表人身份证明书
2014/09/10 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
员工升职自我评价
2019/03/26 职场文书
MySQL数据库 安全管理
2022/05/06 MySQL