#!/usr/bin/envpython#-*-coding:cp936-*-importthreading,os,timeclassReadConfig():defBase_Config(self):#配置话单路径TelPath="d:\bak"#printTelPathreturnTelPathclassGetPath(ReadConfig):defGet_Path(self):#获取路径下分析文件,建立字典dict={}dir_temp=[]file_temp=[]basepath=self.Base_Config()#printbasepathforroot,dirs,filesinos.walk(self.Base_Config()):#获取文件夹节点,获取文件夹对应文件fordirindirs:dir_temp.append(dir)dir_temp.sort()foriindir_temp:#printself.Base_Config()+"\"+str(i)forroot,dirs,filesinos.walk(self.Base_Config()+"\"+str(i)):#获取对应文件夹下的数据file_temp.append(files)foriinrange(len(dir_temp)):#建立数据字典dict[dir_temp[i]]=file_temp[i]returnbasepath,dictclassThreadMain(threading.Thread,GetPath):def__init__(self):#设定一个分析时间片,单位为分钟self.AnalyseTimeArea=5basepath,dict=self.Get_Path()#printbasepath,dictself.dict=dictself.basepath=basepathdefThread_Contorl(self):#读取字典的索引,索引为文件夹节点self.dict.keys()[i]self.Add_Tel_Path_temp2=[]#printself.dict.keys()foriinrange(len(self.dict.keys())):self.Add_Tel_Path_temp1=[]#printself.dict.keys()[i],self.dict[self.dict.keys()[i]]foryinrange(len(self.dict[self.dict.keys()[i]])):#printself.dict.keys()[i],self.dict[self.dict.keys()[i]]#printlen(self.dict[self.dict.keys()[i]])self.Add_Tel_Path=self.basepath+"\"+self.dict.keys()[i]+"\"+self.dict[self.dict.keys()[i]][y]self.Add_Tel_Path_temp1.append(self.Add_Tel_Path)#printAdd_Tel_Path_temp1self.Add_Tel_Path_temp2.append(self.Add_Tel_Path_temp1)#Add_Tel_Path_temp2得到已文件夹节点分类数组,格式如下[[2008-3-8],[2008-3-10],[2008-3-9]]returnself.Add_Tel_Path_temp2#================================================================================#已文件夹为单位进行时间分割计算每日的话单总流量#MethodName:AnalyseMethod_Countdayflow#Author:xinkaiAdd:2008-3-10#================================================================================defAnalyseMethod_Countdayflow(self):self.CountFlow=0#由线程类获得分析数组self.AnalyseList=self.Thread_Contorl()#printAnalyseListforiinrange(len(self.AnalyseList)):self.CountFlow=0#printself.dict.keys()[i],AnalyseList[i]#===============================================================================#此处需要加判断日期以及有效话单#===============================================================================foryinrange(len(self.AnalyseList[i])):#printAnalyseList[i][y]self.AnalyseData=open(self.AnalyseList[i][y],'r')self.CountFlow+=len(self.AnalyseData.readlines())#printself.dict.keys()[i]+str(len(AnalyseData.readlines()))+" "printself.dict.keys()[i]+"当日数据总流量为:"+str(self.CountFlow)#================================================================================#已文件夹为单位进行时间分割按照划定的时间片对每日话单分时流量进行统计#MethodName:AnalyseMethod_CountTimeFlow#Author:xinkaiAdd:2008-3-10#================================================================================defAnalyseMethod_CountTimeFlow(self):Analyse_CountTimeFlow=open('Analyse_CountTimeFlow.log','w')#由线程类获得分析数组self.AnalyseList=self.Thread_Contorl()foriinrange(len(self.AnalyseList)):temp=[]self.AnalyseStack=[]self.AnalyseStackSend=[]foryinrange(len(self.AnalyseList[i])):#已时间文件夹为分割点,分类读取话单进行分析#用来计算每个文件中每个话单记录的时间堆栈self.AnalyseData=open(self.AnalyseList[i][y],'r')self.AnalyseStackSend.append(self.AnalyseData.readlines())#用来计算基础时间轴的堆栈AnalyseStackself.AnalyseData=open(self.AnalyseList[i][y],'r')self.AnalyseStack.append(self.AnalyseData.readlines()[0])#已文件夹时间点分割,获取基础时间轴self.BaseTimeCenter=self.AnalyseStack[0].split(',')[21]#转化话单发送时间为整数self.ChangeBaseTime=self.ChageTime(self.BaseTimeCenter)forhinrange(len(self.AnalyseList[i])):forzinself.AnalyseStackSend[h]:self.TelTime=self.ChageTime(z.split(',')[21])#printstr(self.TelTime)+"//\"+str(self.ChangeBaseTime)importmath#获得已基础时间为轴的时间差值#printint(math.fabs(self.TelTime-self.ChangeBaseTime))/60temp.append((int(math.fabs(self.TelTime-self.ChangeBaseTime))/60)/self.AnalyseTimeArea)printself.dict.keys()[i]Analyse_CountTimeFlow.writelines("话单时间:%s 初始时间片时间片分时流量 "%(self.dict.keys()[i]))Analyse_CountTimeFlow.close()forjinrange(1440/int(self.AnalyseTimeArea)):iftemp.count(j)<>0:Analyse_CountTimeFlow=open('Analyse_CountTimeFlow.log','a')print"分析时间片:%s分钟;第%s时间片;分时流量为%s条;"%(self.AnalyseTimeArea,j,temp.count(j))Analyse_CountTimeFlow.writelines("%s%s%s "%(self.AnalyseTimeArea,j,temp.count(j)))defChageTime(self,datatime):#初始化变量self.YearMD=""self.TimeCS=""#引用时间参数self.datatime=datatimeself.SplitDataTime1=self.datatime.split('')self.SplitDataTime2=self.SplitDataTime1[0].split('/')self.SplitDataTime3=self.SplitDataTime1[1].split(':')#分割结果['2008','03','10']['11','18','18']#组合分割数据转换时间为整数foriinself.SplitDataTime2:self.YearMD+=iforhinself.SplitDataTime3:self.TimeCS+=hself.newTime=self.YearMD+self.TimeCSreturnint(self.newTime)def__del__(self):passclassControlThread(ThreadMain):def__init__(self):basepath,dict=self.Get_Path()self.dict=dictself.basepath=basepathdefControl_Thread(self):#控制使用分析线程print"-----------------------------------------"ObjectThread=ThreadMain()print"开始计算每日流量:"ObjectThread.AnalyseMethod_Countdayflow()print"计算结束"print"-----------------------------------------"importtimetime.sleep(0.01)print"开始计算分时流量:"ObjectThread.AnalyseMethod_CountTimeFlow()print"计算结束"print"-----------------------------------------"if__name__=="__main__":ObjectControl=ControlThread()ObjectControl.Control_Thread()