Linux下校验文件MD5值,最简单的方法就是执行md5sum命令
md5sum filename
原本打算用subprocess调用系统命令来获取md5值,

[python] view plaincopy
print?
  1. import subprocess,shlex  
  2. cmd = "md5sum filename"  
  3. p = subprocess(shlex.split(cmd), stdout=subprocess.PIPE)  
  4. print p.stdout.read()  

不过python有自带的MD5模块hashlib,用起来简单很多,
Python Hashlib模块的使用说明 http://docs.python.org/2/library/hashlib.html
fd = hashlib.md5() #获取一个MD5加密算法对象
fd.update("string") #指定需要加密的字符串
fd.hexdigest() #获取加密后的16进制字符串

实例

[python] view plaincopy
print?
  1. #!/usr/bin/env python             
  2. #coding : utf-8 3  4 import sys   
  3. import hashlib                    
  4.                                   
  5. def md5sum(filename):             
  6.     fd = open(filename,"r")  
  7.     fcont = fd.r  
  8.     fd.close()           
  9.     fmd5 = hashlib.md5(fcont)  
  10.     return fmd5               
  11.                                   
  12. if __name__ == "__main__":        
  13.     fmd5 = md5sum(sys.argv[1])  
  14.     print fmd5.hexdigest()    

其中fmd5 = hashlib.md5(fcont)等同于
fmd5 = hashlib.md5(fcont)
fmd5.update(fcont)

需要注意的是,传入 hashlib.md5() 的应该是 文件内容而不是文件名 ,这样才是对文件内容产生md5校验码;
另外,调用了 hashlib.md5() 后返回的是一个对象,想要获得linux下 md5sum 同样的效果,还要调用一下 hexdigest() 方法。

但是,这个方法有点过于粗暴,当检验大文件时,一次将所有文件内容读入内存,实在耗费较大,
网上给出实例http://blog.csdn.net/shanliangliuxing/article/details/10115397,
根据文件块长度,依次获取文件内容读入内存,通过update()逐次更新校验值,

[python] view plaincopy
print?
  1. #!/usr/bin/env python 2  
  2.   
  3.  #coding : utf-8 3 import hashlib  
  4.     
  5.   def md5hex(word):  
  6.      """ MD5加密算法,返回32位小写16进制符号 
  7.      """   
  8.      if isinstance(word, unicode):  
  9.          word = word.encode("utf-8")  
  10.      elif not isinstance(word, str):  
  11.          word = str(word)  
  12.      m = hashlib.md5()  
  13.      m.update(word)  
  14.      return m.hexdigest()  
  15.    
  16.   def md5sum(fname):  
  17.      """ 计算文件的MD5值 
  18.      """  
  19.      def read_chunks(fh):  
  20.          fh.seek(0)  
  21.          chunk = fh.read(8096)  
  22.          while chunk:  
  23.              yield chunk  
  24.              chunk = fh.read(8096)  
  25.          else#最后要将游标放回文件开头  
  26.              fh.seek(0)  
  27.      m = hashlib.md5()  
  28.      if isinstance(fname, basestring) \  
  29.              and os.path.exists(fname):  
  30.          with open(fname, "rb") as fh:  
  31.              for chunk in read_chunks(fh):  
  32.                  m.update(chunk)  
  33.      #上传的文件缓存 或 已打开的文件流  
  34.      elif fname.__class__.__name__ in ["StringIO""StringO"] \  
  35.              or isinstance(fname, file):  
  36.          for chunk in read_chunks(fname):  
  37.              m.update(chunk)  
  38.      else:  
  39.          return ""40     return m.hexdigest()  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/451517.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/451517.shtml
英文地址,请注明出处:http://en.pswp.cn/news/451517.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nexus 安装(Linux 环境)

一、环境准备 安装 JDK 1.7 二、下载 Nexus 压缩文件 下载地址:http://www.sonatype.org/nexus/archived/ 三、上传压缩文件 四、解压缩文件 五、配置环境变量 1、临时配置 mvn clean package -Dmaven.test.skiptrue -Dmaven.javadoc.skiptrue命令:expor…

android 连接指定wifi

本文牵涉kotlin和rxjava的相关知识 //查询wifi信息需要申请权限,权限工具类就不要在意了,重点在下面 PermissionUtils.permission(PermissionConstants.LOCATION).callback(object : PermissionUtils.SimpleCallback {override fun onGranted() {//通过授…

英特尔预计5年内将成智能手机芯片大厂

北京时间4月26日早间消息,英特尔预计,英特尔在未来5年内将成为智能手机芯片市场的“重要参与者”。过去10年中,英特尔在这一市场的多次尝试都未能获得成功。 英特尔CFO斯泰西史密斯(Stacy Smith)表示:“英特尔并不满足于成为市场中…

java.util.UnknownFormatConversionException: Conversion = ‘,‘ 解决

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 报错&#xff1a; 2. 原因&#xff1a; 出错代码&#xff1a; if(info.getRiceCount() < 0){ ... } 事实上 对象的riceCoun属性值…

JAVA中获取当前系统时间

一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat;public class NowString { public static void main(String[] args) { SimpleDateFormat df new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式Sys…

爬虫中的关于字符串的一些理解

1.基本概念 字符(Character)是各种文字和符号的总称&#xff0c;包括各国家文字、标点符号、图形符号、数字等 字符集(Character set)是多个字符的集合 字符集包括&#xff1a;ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等 ASCII编码是1个字节&#xff0c;而Uni…

分布式数据一致性

分布式系统数据一致性问题 感谢作者分享&#xff01;

HttpServletRequest中获取IP值

获取IP值&#xff1a; public class IpAdrressUtil {/*** 获取Ip地址* param request* return*/private static String getIpAdrress(HttpServletRequest request) {String Xip request.getHeader("X-Real-IP");String XFor request.getHeader("X-Forwarded-F…

国外较好的IT网站

最近有些读者给我来信说很喜欢这个网站上的文章&#xff0c;并且也想通过翻译学习英文&#xff0c;他们询问我这些文章的英文原文是从哪里找到的? 外刊IT评论上的翻译的英文来源很杂&#xff0c;我总结了一下&#xff0c;大概有几个 集中的出处&#xff0c;下面列举出来供大家…

oracle怎样把查询的null转换为0

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 NVL(Expr1,Expr2)如果Expr1为NULL&#xff0c;返回Expr2的值&#xff0c;否则返回Expr1的值 例如&#xff1a;select NVL(SUM(MONEY) ,0…

Map转为String

Map转为String 最近在做redis缓存时&#xff0c;需要将一个Map<String,Object>的对象转换为String对象存入redis&#xff0c;用的时候需从redis中取出来后并转为Map<String,Objcet>对象。 之前的做法直接就是Map对象的toString()存入redis,后面取出是就是用再转换为…

PowerBI分析Exchange服务器IIS运行日志

只要是基于Windows Server 的IIS来提供Web服务的应用&#xff0c;其实都可以对IIS的日志W3C进行分析&#xff0c;这样可以快速的了解整个web站点的运行情况&#xff0c;特别是对一些请求页面响应时间有要要求的&#xff0c;都可以从这些日志中分析问题出在哪&#xff0c;下面我…

创建自已的sql函数

# 随机产生字符串 #rand_string(n INT) rand_string 是函数名 (n INT) //该函数接收一个整数create function rand_string(n INT) returns varchar(255) #该函数会返回一个字符串begin #chars_str定义一个变量 chars_str,类型是 varchar(100),默认值abcdefghijklmnopqrstuvwxyz…

优秀博客汇总

分布式事务产生场景 一文搞定分布式系统数据一致性问题 分布式缓存的基本原理 分布式相关汇总 分布式事务&#xff0c;两阶段提交协议&#xff0c;三阶段提交协议 三星索引 TCP如何保持长连接&#xff0c;并识别不通请求&#xff1f; redisson中的看门狗机制总结 二叉树…

.NET Framework各版本比较

导读&#xff1a;一直以来&#xff0c;众多学校教学以及公司开发环境所使用Visual Studio .NET Framework版本多不相同&#xff0c;本文作者比较了.NET Framework多个版本之间的区别&#xff0c;方便各位选择和切换.NET Framework。 版本号 发布日期 Visual Studio的版本 Windo…

java中 4 种取整函数

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如下&#xff1a; round 函数可以特别注意一下&#xff1a;

python中的.idea文件夹是干嘛的

pycharm作为IDE时&#xff0c;会自动生成.idea文件夹用。 来存放项目的配置信息。这个文件夹是自动生成&#xff0c;版本控制信息等&#xff0c;包括历史记录。

section8

本章节的目的是 【明确目标用户群】 &#xff0c;以更好的服务现有用户。 【知识点】 1.作图 显示中文plt.rcParams[font.sans-serif] [SimHei] # 步骤一&#xff08;替换sans-serif字体&#xff09; plt.rcParams[axes.unicode_minus] False # 步骤二&#xff08;解决坐标轴…

经典算法汇总

一. 数组相关 二. 链表相关 三. 字符串相关 LeetCode第3题&#xff1a;无重复字符的最长子串 LeetCode第567题&#xff1a;字符串的排列 四. 二叉树相关

码农如何实现高帅富

当今IT界真可谓是好不热闹&#xff1a;谷歌推出chrome os&#xff0c;微软推出windows 8&#xff0c;W3C的HTML5也让人如雷贯耳&#xff0c;又有“云”飘在天上&#xff0c;至于最近最火的移动开发诸如ios、iphone、windows phone更是无人不知&#xff0c;无人不晓了&#xff0…