利用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实现排序算法
Feb 14 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
python的多重继承的理解
Aug 06 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
Python爬虫实现验证码登录代码实例
May 10 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
Aug 12 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
使用Python实现分别输出每个数组
Dec 06 Python
python实现微信打飞机游戏
Mar 24 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP实现图片简单上传
2006/10/09 PHP
php REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
javascript如何写热点图
2015/12/08 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
德国网上花店:Valentins
2018/08/15 全球购物
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
Java程序员常见面试题
2015/07/16 面试题
大学生求职简历的自我评价范文
2013/10/12 职场文书
校本教研工作方案
2014/01/14 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
民生工作实施方案
2014/05/31 职场文书
生日答谢词
2015/01/05 职场文书
领导离职感言
2015/08/03 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
六年级作文之自救
2019/12/19 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA