'''
Created on 2015年8月26日
@author: Administrator
'''
import os
import sys
import zipfile
import fnmatch
import datetime
import time
import csv
class Util(object):
#read information from the txt file
def readPathInfo(self,path):
list=[]
pathinfo=os.path.normpath(path)
file_handle=open(pathinfo,"r")
try:
for path in file_handle:
list.append(path.strip())
except IOError:
print("READ ERROR")
sys.exit()
finally:
file_handle.close()
return list
#extract the zipmodule in the extraction_dir
def zipExtractAll(self,zipmodule,extraction_dir):
zipfiles=zipfile.ZipFile(zipmodule,"r")
zipfiles.extractall(extraction_dir)
#gain the modify time of the file
#the size of the file
def fileModifyTimeSize(self,filepath):
list=[]
stat=os.stat(filepath)
last_modified = stat.st_mtime
timeArray=time.localtime(last_modified)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
size=os.path.getsize(filepath)
list.append(otherStyleTime)
list.append(size)
return list
#fnmatch *.zip
#fnmatch *.dll
def iterFindFiles(self,path, extension):
for root, dirs, files in os.walk(path):
for filename in fnmatch.filter(files, extension):
yield os.path.join(root, filename)
#gain the modules and properties
def acquireModulesInfo(self,path,extension):
dictInfo={}
for filename in Util.iterFindFiles(self,path,extension):
list=Util.fileModifyTimeSize(self,filename)
dictInfo[filename]=list
return dictInfo
#compare the timestamp and output the csv file
def compTimeSizeCsv(self,dictoriginal,dictcompare,csvfile):
##open the csv
csvoutput=open(csvfile, 'w')
fieldnames=['originalmodule','originaltimestamp','originalsize',
'comparemodule','comparetimestamp','comparesize','result']
writer=csv.DictWriter(csvoutput, fieldnames=fieldnames)
writer.writeheader()
#prepare data for compare
dictbasedir={}
for key in dictcompare.keys():
basename=os.path.basename(key)
dirname=os.path.dirname(key)
dictbasedir[basename]=dirname
for count in range(0,len(dictoriginal.keys())):
keyvalue=dictoriginal.popitem()
if os.path.basename(keyvalue[0]) in dictbasedir.keys():
keycompare=os.path.join(dictbasedir[os.path.basename(keyvalue[0])],os.path.basename(keyvalue[0]))
listcompare=dictcompare.pop(keycompare)
listoriginal=keyvalue[1]
if listoriginal[0]==listcompare[0] and listoriginal[1]==listcompare[1]:
writer.writerow({'originalmodule':keyvalue[0],'originaltimestamp':listoriginal[0],'originalsize':listoriginal[1],
'comparemodule':keycompare,'comparetimestamp':listcompare[0],'comparesize':listcompare[1],'result':"OK"})
else:
writer.writerow({'originalmodule':keyvalue[0],'originaltimestamp':listoriginal[0],'originalsize':listoriginal[1],
'comparemodule':keycompare,'comparetimestamp':listcompare[0],'comparesize':listcompare[1],'result':"NG"})
#dictoriginal
for key in dictoriginal.keys():
writer.writerow({'originalmodule':key,'originaltimestamp':dictoriginal[key][0],'originalsize':dictoriginal[key][1],
'comparemodule':"",'comparetimestamp':"",'comparesize':"",'result':""})
#dictcompare
for key in dictcompare.keys():
writer.writerow({'originalmodule':"",'originaltimestamp':"",'originalsize':"",
'comparemodule':key,'comparetimestamp':dictcompare[key][0],'comparesize':dictcompare[key][1],'result':""})
return True
#Test correctness of the code
if __name__=="__main__":
util=Util()
listpath=util.readPathInfo("C:\\path.txt")
dictlist=[]
for path in listpath:
if os.path.isdir(path):
for filename in util.iterFindFiles(path, "*.zip"):
util.zipExtractAll(filename,path)
dictorigcomp=util.acquireModulesInfo(path,"*.dll")
dictlist.append(dictorigcomp)
else:
print("the input information is not path")
try:
util.compTimeSizeCsv(dictlist[0], dictlist[1], "C:\\csvreport.csv")
print("Successful")
except Exception:
print("Unsuccessful")
Created on 2015年8月26日
@author: Administrator
'''
import os
import sys
import zipfile
import fnmatch
import datetime
import time
import csv
class Util(object):
#read information from the txt file
def readPathInfo(self,path):
list=[]
pathinfo=os.path.normpath(path)
file_handle=open(pathinfo,"r")
try:
for path in file_handle:
list.append(path.strip())
except IOError:
print("READ ERROR")
sys.exit()
finally:
file_handle.close()
return list
#extract the zipmodule in the extraction_dir
def zipExtractAll(self,zipmodule,extraction_dir):
zipfiles=zipfile.ZipFile(zipmodule,"r")
zipfiles.extractall(extraction_dir)
#gain the modify time of the file
#the size of the file
def fileModifyTimeSize(self,filepath):
list=[]
stat=os.stat(filepath)
last_modified = stat.st_mtime
timeArray=time.localtime(last_modified)
otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
size=os.path.getsize(filepath)
list.append(otherStyleTime)
list.append(size)
return list
#fnmatch *.zip
#fnmatch *.dll
def iterFindFiles(self,path, extension):
for root, dirs, files in os.walk(path):
for filename in fnmatch.filter(files, extension):
yield os.path.join(root, filename)
#gain the modules and properties
def acquireModulesInfo(self,path,extension):
dictInfo={}
for filename in Util.iterFindFiles(self,path,extension):
list=Util.fileModifyTimeSize(self,filename)
dictInfo[filename]=list
return dictInfo
#compare the timestamp and output the csv file
def compTimeSizeCsv(self,dictoriginal,dictcompare,csvfile):
##open the csv
csvoutput=open(csvfile, 'w')
fieldnames=['originalmodule','originaltimestamp','originalsize',
'comparemodule','comparetimestamp','comparesize','result']
writer=csv.DictWriter(csvoutput, fieldnames=fieldnames)
writer.writeheader()
#prepare data for compare
dictbasedir={}
for key in dictcompare.keys():
basename=os.path.basename(key)
dirname=os.path.dirname(key)
dictbasedir[basename]=dirname
for count in range(0,len(dictoriginal.keys())):
keyvalue=dictoriginal.popitem()
if os.path.basename(keyvalue[0]) in dictbasedir.keys():
keycompare=os.path.join(dictbasedir[os.path.basename(keyvalue[0])],os.path.basename(keyvalue[0]))
listcompare=dictcompare.pop(keycompare)
listoriginal=keyvalue[1]
if listoriginal[0]==listcompare[0] and listoriginal[1]==listcompare[1]:
writer.writerow({'originalmodule':keyvalue[0],'originaltimestamp':listoriginal[0],'originalsize':listoriginal[1],
'comparemodule':keycompare,'comparetimestamp':listcompare[0],'comparesize':listcompare[1],'result':"OK"})
else:
writer.writerow({'originalmodule':keyvalue[0],'originaltimestamp':listoriginal[0],'originalsize':listoriginal[1],
'comparemodule':keycompare,'comparetimestamp':listcompare[0],'comparesize':listcompare[1],'result':"NG"})
#dictoriginal
for key in dictoriginal.keys():
writer.writerow({'originalmodule':key,'originaltimestamp':dictoriginal[key][0],'originalsize':dictoriginal[key][1],
'comparemodule':"",'comparetimestamp':"",'comparesize':"",'result':""})
#dictcompare
for key in dictcompare.keys():
writer.writerow({'originalmodule':"",'originaltimestamp':"",'originalsize':"",
'comparemodule':key,'comparetimestamp':dictcompare[key][0],'comparesize':dictcompare[key][1],'result':""})
return True
#Test correctness of the code
if __name__=="__main__":
util=Util()
listpath=util.readPathInfo("C:\\path.txt")
dictlist=[]
for path in listpath:
if os.path.isdir(path):
for filename in util.iterFindFiles(path, "*.zip"):
util.zipExtractAll(filename,path)
dictorigcomp=util.acquireModulesInfo(path,"*.dll")
dictlist.append(dictorigcomp)
else:
print("the input information is not path")
try:
util.compTimeSizeCsv(dictlist[0], dictlist[1], "C:\\csvreport.csv")
print("Successful")
except Exception:
print("Unsuccessful")