Python实现通过文件路径获取文件hash值的方法


Posted in Python onApril 29, 2017

本文实例讲述了Python实现通过文件路径获取文件hash值的方法。分享给大家供大家参考,具体如下:

import hashlib
import os,sys
def CalcSha1(filepath):
  with open(filepath,'rb') as f:
    sha1obj = hashlib.sha1()
    sha1obj.update(f.read())
    hash = sha1obj.hexdigest()
    print(hash)
    return hash
def CalcMD5(filepath):
  with open(filepath,'rb') as f:
    md5obj = hashlib.md5()
    md5obj.update(f.read())
    hash = md5obj.hexdigest()
    print(hash)
    return hash
if __name__ == "__main__":
  if len(sys.argv)==2 :
    hashfile = sys.argv[1]
    if not os.path.exists(hashfile):
      hashfile = os.path.join(os.path.dirname(__file__),hashfile)
      if not os.path.exists(hashfile):
        print("cannot found file")
      else
      CalcMD5(hashfile)
  else:
    CalcMD5(hashfile)
    #raw_input("pause")
else:
  print("no filename")

使用Python进行文件Hash计算有两点必须要注意:

1、文件打开方式一定要是二进制方式,既打开文件时使用b模式,否则Hash计算是基于文本的那将得到错误的文件Hash(网上看到有人说遇到Python的Hash计算错误在大多是由于这个原因造成的)。

2、对于MD5如果需要16位(bytes)的值那么调用对象的digest()hexdigest()默认是32位(bytes),同理Sha1digest()hexdigest()分别产生20位(bytes)和40位(bytes)的hash值

Python 相关文章推荐
详解Python爬虫的基本写法
Jan 08 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
python 二分查找和快速排序实例详解
Oct 13 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
python内存管理机制原理详解
Aug 12 Python
Python爬取365好书中小说代码实例
Feb 28 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
Python collections.defaultdict模块用法详解
Jun 18 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
python基于pyDes库实现des加密的方法
Apr 29 #Python
Python简单实现Base64编码和解码的方法
Apr 29 #Python
Python变量和字符串详解
Apr 29 #Python
python实现unicode转中文及转换默认编码的方法
Apr 29 #Python
Python 正则表达式实现计算器功能
Apr 29 #Python
python中类变量与成员变量的使用注意点总结
Apr 29 #Python
Python urls.py的三种配置写法实例详解
Apr 28 #Python
You might like
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
DOM 基本方法
2009/07/18 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
培训楼经理岗位责任制
2014/02/10 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
Oracle锁表解决方法的详细记录
2022/06/05 Oracle
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript