利用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 ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
使用IronPython把Python脚本集成到.NET程序中的教程
Mar 31 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
Python实现八皇后问题示例代码
Dec 09 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
django 中QuerySet特性功能详解
Jul 25 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
Python命令行click参数用法解析
Dec 19 Python
Pytorch上下采样函数--interpolate用法
Jul 07 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多线程抓取网页实现代码
2010/07/22 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
基于jquery实现图片放大功能
2016/05/07 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
vue cli 全面解析
2018/02/28 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
python pandas时序处理相关功能详解
2019/07/03 Python
Python列表的切片实例讲解
2019/08/20 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
python批量修改文件名的示例
2020/09/27 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
python 模拟登陆github的示例
2020/12/04 Python
python实现银行账户系统
2021/02/22 Python
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
政法学院毕业生求职信
2014/02/28 职场文书
职业规划实施方案
2014/06/10 职场文书
高三英语复习计划
2015/01/19 职场文书
监察建议书
2015/02/04 职场文书
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android