危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18787700

几个Python小程序

危险漫步之前在学Python的时候,参考书上或网上的代码写了几个小程序,发出来算个学习笔记,也请朋友们帮着给找找代码中错误和不严谨的地方。

一、一个简单的下载程序

用过Curl后觉得它的下载功能很帅,命令行下的,就想用Python也来写一个命令行下的下载程序。

其实用Python实现下载文件的功能很简单,用urllib模块中的urlretrieve()函数就可以了。

url是要下载文件的URL地址,frlename是文件下载后保存时的文件名,reporthook是显示下载进度的,data还不知道是干什么的。除了url参数外,另外3个参数好像都可以省略。

把代码保存为文件filedown.py。程序需要 输入两个参数,一个是要下载文件的URL地址,一个是文件下载后保存时的文件名。来下载个文件测试下程序的功能。要下载的文件我挑了个比较小的——小Q书桌的安装文件(用的移动CMCC的网络,现在是周五晚上,网速很慢,只能挑个小文件来做测试了)下载后的保存文件名QDeskSetup_25_1277.exe。打开命令提示符,切换到文件filedown.py所在的目录,输入如下命令:

回车后就开始下载文件了,下载过程中程序会动态显示已经下载的文件的大小和已经完成的百分比。

来到文件filedown.py所在的目录C:\pycode2\下,发现文件QDeskSetup_25_1277.exe已经下载好了,双击运行,程序一切正常,说明程序可以完成下载文件的功能。但那个完成进度的100.08%不知道是怎么算出来的,太刺眼,要改。另外,程序好像还缺了一个常见下载程序都有的功能一一显示实时下载速度。

把代码保存为文件filedown ver4.py。这次程序加入了显示下载速度的功能,还增加了可以手工中断正在下载的文件的功能。还是来测试下程序的功能。

回车后程序显示能显示下载速度了。

不过原来的问题解决了,新的问题又来了。

同样的机子,下载同样的文件,修改后的程序用了75.140秒,而原来的程序只用了10.969秒,说明修改后的程序下载文件的速度严重变慢了。什么原因造成的呢?我一时没找到答案,考虑过是不是加入的显示文件下载速度和下载百分比的代码执行是不是比较占用CPU,下载的时候特意看了一下任务管理器中CPU的情况,结果发现CPU使用率不高,看来不是这个原因。知道怎么回事的朋友欢迎指教。

二、计算文件的SHA1值

从网上下载了几个号称MSDN原版的Windows操作系统的安装镜像,想在虚拟机里安装几个原版系统玩玩。但下载后还有点不放心,担心文件有被修改过。于是就想验证下下载的镜像文件的哈希值。MSDN官方网站上已经给出了镜像文件的SHA1值,比如我下载的网站上给出的文件的SHA1值为2CEOB2DB34D76ED3F697CE148CB7594432405E23。如果下载的文件的SHA1值也是2CEOB2DB34D76ED3F697CE148CB7594432405E23,说明文件没被修改,可以放心使用。

计算文件的SHA1值有很多工具,但手头有Python,能少用一个第三方软件就少用一个,就考虑用Python写个计算文件SHA1值的小程序。

先上网上搜索了下相关代码,网上已经有了。网上的代码用的是hashlib模块中的shal()函数来计算SHA1值。为了处理大文件,所以需要使用shal()函数的update()方法。