好久没有写随笔了,正好这两天可以休整一下,借此机会总结下最近使用python的小体会。

个人体会文件校验在下载文件时使用较多,在linux下最简单的实现方式就是:

1 $ md5sum filename2 21c7ee192e64569ce43cfb869bdb2755 filename

当然在python当中也有对应的模块可以实现此功能,在python2.5之前可以使用 md5 模块,但是在python2.5以后就推荐使用 hashlib 来代替 md5 模块了。最简单的实现代码如下:

1 #!/usr/bin/env python

2 #coding : utf-8

3

4 importsys5 importhashlib6

7 defmd5sum(filename):8 file_object = open(filename, 'rb')9 file_content =file_object.read()10 file_object.close()11 file_md5 =hashlib.md5(file_content)12 returnfile_md513

14 if __name__ == "__main__":15 file_md5 = md5sum(sys.argv[1])16 print file_md5.hexdigest()

竹风觉得有两个地方值得注意:

一个是传入 hashlib.md5() 的应该是 file_object.read() ,这样才是对文件内容产生md5校验码,竹风刚开始就是没有使用 read() 方法,而是传入filename(这样的md5是对文件名生成的),导致产生的校验码不对;

另外一个地方是,调用了 hashlib.md5() 后返回的是一个对象,想要获得 linux 下 md5sum 同样的效果,还要调用一下 hexdigest() 方法。

当然,上面的代码考虑得不够周全。如果要对一个比较大的文件进行校验,将会把文件内容一次读入内存,造成性能上的缺陷。个人比较推荐从http://ryan-liu.iteye.com/blog/1530029提供的代码,代码如下:

1 #!/usr/bin/env python

2 #coding : utf-8

3 importhashlib, os4

5 defmd5hex(word):6 """MD5加密算法,返回32位小写16进制符号7 """

8 ifisinstance(word, unicode):9 word = word.encode("utf-8")10 elif notisinstance(word, str):11 word =str(word)12 m =hashlib.md5()13 m.update(word)14 returnm.hexdigest()15

16 defmd5sum(fname):17 """计算文件的MD5值18 """

19 defread_chunks(fh):20 fh.seek(0)21 chunk = fh.read(8096)22 whilechunk:23 yieldchunk24 chunk = fh.read(8096)25 else: #最后要将游标放回文件开头

26 fh.seek(0)27 m =hashlib.md5()28 ifisinstance(fname, basestring) \29 andos.path.exists(fname):30 with open(fname, "rb") as fh:31 for chunk inread_chunks(fh):32 m.update(chunk)33 #上传的文件缓存 或 已打开的文件流

34 elif fname.__class__.__name__ in ["StringIO", "StringO"] \35 orisinstance(fname, file):36 for chunk inread_chunks(fname):37 m.update(chunk)38 else:39 return ""

40 return m.hexdigest()

这段代码就足够强大了,每次读入8k的内容,然后调用 update() ,来更新md5。

PS:至于为什么是8k?这个就涉及到了IO大小方面的内容了。提供一篇文章,有兴趣的可以看看了解下:http://blog.sina.com.cn/s/blog_6200c1440100vt4z.html

python文件拷贝并校验_Python札记 -- 文件校验相关推荐

  1. python压缩_Python札记 -- 文件压缩

    在日常工作当中免不了要对文件进行压缩,Python标准库里也提供了实现压缩功能的模块. 一.简单的例子 首先了解一下压缩单个文件在Python中怎么实现.竹风建了个测试文件夹zip_text,里面有t ...

  2. 属于python文件的操作有_Python的文件操作

    1.初始文件操作 1.使用python读写文件使用open()函数获取文件句柄,就可以操作文件了,根据打开方式不同能执行的操作也不同. 打开方式有: r.w.a.r+.w+.a+.rb.wb.ab.r ...

  3. python文件操作与异常处理_Python学习——文件操作和异常处理

    在上一篇文章中,我们介绍了 Python 的函数和模块,现在我们介绍 Python 中的异常和文件. 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9963 ...

  4. python文件读取与输出_python基本文件操作(文件输入和输出)

    文件输入输出中常用的文件对象方法: open: 返回一个新的文件对象,调用该对象的上的方法可对文件进行任何操作 readline: 读取一行数据包括结尾的换行符在内 write: 将数据写入文件中 c ...

  5. python对文件的操作模式_python对文件的操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  6. python文件是怎么写_python头文件怎么写

    本文主要以python2为例.首先介绍一下Python头文件的编程风格,然后再给大家详细介绍import部分的基本用法.这两个部分就是Python中头文件的组成模块. 编程风格#!/usr/bin/e ...

  7. python获取当前路径导包_python 通过文件夹导入包的操作

    通过文件夹导入包要求每个目录下都有一个__init__.py文件,此文件可空白.也可不空.a@ubuntu:~/Desktop$ tree myp myp ├── a │ ├── b.py │ └── ...

  8. python在文件中写入字典_python初学--文件操作、字典

    文件读写 1.先打开文件 2.读取/写入内容 3.保存文件 文件的open模式有三种 1.w 写模式,它是不能读的 只要用w打开文件,文件中的东西都会被清空 w+, 写读模式,只要沾上w 就会清空原来 ...

  9. python文件操作的方法_python中文件操作的基本方法

    在python中对一个文件进行操作,分为三大步:打开,操作,关闭 首先创建一个文件hello,里面内容为hello world 一.打开一个文件 #open('文件名或文件路径','操作模式',文件里 ...

最新文章

  1. 【原】页面跳转以及表单提交中有中文的解决办法
  2. php 日期多余小时,在PHP中添加小时到日期时间
  3. c++基础学习(07)--(类)
  4. 在NetBeans IDE 6.9.1上搭建Android SDK环境(WIN和Linux平台)
  5. P1481 魔族密码 (LIS)
  6. 程序员的自我救赎---4.2:消息中心讲解与应用
  7. Linux线程的同步,linux线程同步
  8. 一蔚来ES8汽车疑似失控 将地下车库墙撞穿
  9. 图像处理之基础---图像高效不失真缩放既卷积应用
  10. Python 小白学习
  11. ARM架构、指令集、内核版本、CISC与RISC、ARM产品线
  12. arm x86 区别_深入了解arm架构和x86架构有什么区别及各自的优势选型者重点查看...
  13. JavaSocket编程基础
  14. 游戏战斗力量模型量化
  15. 路由与交换技术(复习知识点-全)
  16. 每日一坑:Github配置ssh后,拉代码依旧需要鉴权,且鉴权失败。
  17. 小学计算机课程听课记录,小学信息技术听课记录
  18. (专升本)信息安全(应用安全策略、网络安全策略)
  19. Java异常之 Error 和 Exception
  20. python canvas画弧度_编程作战丨如何利用python绘制可爱皮卡丘?

热门文章

  1. linux复制文件多份,Linux下同时复制多个文件
  2. 常规调幅系统matlab结果,matlab课程设计参考题目
  3. K8S环境快速部署Kafka(K8S外部可访问)
  4. android 图片编辑工具,图片编辑工具手机版下载
  5. 大数据早报:阿里巴巴收购以色列创业公司 迅雷再次回应玩客云用户维权事件(12.1)
  6. 铁矿石再度领跌商品,LPG认沽上涨3倍,MTO季节性上涨2022.6.22
  7. tp获取php异常信息,ThinkPHP 异常处理
  8. 会议记录管理系统(1)
  9. CAN总线错误分析方法
  10. CAN 数据帧,远程帧,错误帧,以及出错重连