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实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
git进行版本控制心得详谈
Dec 10 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
Django中的forms组件实例详解
Nov 08 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python多个装饰器的调用顺序实例解析
May 22 Python
python自动化之如何利用allure生成测试报告
May 02 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面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
PHP实现的进度条效果详解
2016/05/03 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
JS处理一些简单计算题
2018/02/24 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
详解JavaScript 的变量
2019/03/08 Javascript
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
解密Python中的描述符(descriptor)
2015/06/03 Python
Python引用模块和查找模块路径
2016/03/17 Python
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
2020/01/16 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
优秀班主任事迹材料
2014/12/16 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
Python基础之hashlib模块详解
2021/05/06 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript