一般软件公司在发布软件前会将生产环境要发布的软件包和测试环境最后测试后的包做一个比对以验证要发布包的正确性,可以通过对比两个软件包的MD5值来实现,因为原包的一点不同将会其对应MD5值就会有较大差异。但是如果仅仅是一对MD5值得比较还简单,如果一次要比较较多的软件包时就会有较大的工作量,可以通过下面这个小脚本轻松实现软件包的对比
需要输入的信息有:
线上软件包的下载到的目的文件夹
线上软件包下载链接写入一个文本文件,每行一个。
本地软件包所在目录
#!/usr/bin/env/python
# -*- coding: utf-8 -*-
import os
import time
import urllib
import hashlib
#创建测试文件下载目录,如果存在则不需要创建
def Generatedirectory(dirname):
if not os.path.exists(dirname):
os.mkdir(dirname)
print ‘Create the test dirs %s OK!‘ %(dirname)
else:
print ‘The test dirs %s alreay exist!‘ %(dirname)
#读取文件,取得文件内容列表
def Readfile(filename):
file=open(filename,‘r‘)
list=file.readlines()
file.close()
return list
#下载测试文件
def Downloadfiles(url,dirname,basename):
downloadfilename=os.path.join(dirname,basename)
urllib.urlretrieve(url,downloadfilename)
return downloadfilename
#生成文件的MD5值
def md5_file(name):
m=hashlib.md5()
rfile=open(name,‘rb‘)
m.update(rfile.read())
rfile.close()
md5=m.hexdigest()
return md5
#将生成的MD5值写入文件
def Writemd5_file(filename,value):
fopen=open(filename,‘a‘)
fopen.write(value+‘\n‘)
fopen.close()
#读取目录中文件,以列表形式返回内容
def Readfileofdirectory(dirname):
localfile=os.listdir(dirname)
list=[]
for lf in localfile:
localfilepath=os.path.join(dirname,lf)
list.append(localfilepath)
return list
dirname=raw_input(‘请输入下载到哪个目录:‘)
Generatedirectory(dirname)
linkfile=raw_input(‘请输入存放链接地址的文件名:‘)
urllist=Readfile(linkfile)
#basename=raw_input(‘please input the downloadfilename:‘)
currenttime=time.strftime(‘%Y-%m-%d‘,time.localtime())
md5filebasename=‘md5_file‘+currenttime+‘.txt‘
md5filename=os.path.join(dirname,md5filebasename)
for url in urllist:
url=url.strip(‘\n‘)
basename=url[-8:]
downloadfilename=Downloadfiles(url,dirname,basename)
df_md5=md5_file(downloadfilename)
Writemd5_file(md5filename,df_md5)
localfilepath=raw_input(‘请输入本地软件包的存放目录:‘)
localmd5basename=‘md5_file‘+currenttime+‘.txt‘
localmd5=os.path.join(localfilepath,localmd5basename)
lf=Readfileofdirectory(localfilepath)
for f in lf:
lf_md5=md5_file(f)
Writemd5_file(localmd5,lf_md5)
dmd5list=Readfile(md5filename)
lmd5list=Readfile(localmd5)
dmd5list.sort()
lmd5list.sort()
print dmd5list
print lmd5list
if cmp(dmd5list,lmd5list)==0:
print ‘Matched‘
else:
print ‘Failed‘
本文出自 “CherriesZhao” 博客,请务必保留此出处http://cherrieszhao.blog.51cto.com/5310809/1369464