利用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人脸识别初探
Dec 21 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
Jun 13 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
python3多线程知识点总结
Sep 26 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
python 字段拆分详解
Dec 17 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
Python selenium模块实现定位过程解析
Jul 09 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
python热力图实现简单方法
Jan 29 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
1.PHP简介
2006/10/09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
js实现表格字段排序
2014/02/19 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
python简单实现旋转图片的方法
2015/05/30 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
几个人围成一圈的问题
2013/09/26 面试题
写自荐信有哪些不宜?
2013/10/17 职场文书
会务接待方案
2014/02/27 职场文书
股份合作协议书范本
2014/04/14 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
离职感谢信怎么写
2015/01/22 职场文书
2015年财政局工作总结
2015/05/21 职场文书
React配置子路由的实现
2021/06/03 Javascript
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技