您的位置:首页 > 编程语言

一段流量分析工具代码检视

2008-04-17 23:57 363 查看

#!/usr/bin/env python


#-*- coding: cp936 -*-


import threading,os,time




class ReadConfig():





def Base_Config(self):





#配置话单路径


TelPath = "d:/bak"


#print TelPath


return TelPath








class GetPath(ReadConfig):





def Get_Path(self):





#获取路径下分析文件,建立字典


dict = {}


dir_temp = []


file_temp = []


basepath = self.Base_Config()


#print basepath


for root, dirs, files in os.walk(self.Base_Config()):


#获取文件夹节点,获取文件夹对应文件


for dir in dirs:


dir_temp.append(dir)


dir_temp.sort()


for i in dir_temp:


#print self.Base_Config()+"/"+str(i)


for root, dirs, files in os.walk(self.Base_Config()+"/"+str(i)):


#获取对应文件夹下的数据


file_temp.append(files)


for i in range(len(dir_temp)):


#建立数据字典


dict[dir_temp[i]] = file_temp[i]


return basepath,dict




class ThreadMain(threading.Thread,GetPath):





def __init__(self):





#设定一个分析时间片,单位为分钟


self.AnalyseTimeArea = 5


basepath,dict = self.Get_Path()


#print basepath,dict


self.dict = dict


self.basepath = basepath





def Thread_Contorl(self):





#读取字典的索引,索引为文件夹节点self.dict.keys()[i]


self.Add_Tel_Path_temp2 = []


#print self.dict.keys()


for i in range(len(self.dict.keys())):


self.Add_Tel_Path_temp1 = []


#print self.dict.keys()[i],self.dict[self.dict.keys()[i]]


for y in range(len(self.dict[self.dict.keys()[i]])):


#print self.dict.keys()[i],self.dict[self.dict.keys()[i]]


#print len(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)


#print Add_Tel_Path_temp1


self.Add_Tel_Path_temp2.append(self.Add_Tel_Path_temp1)


#Add_Tel_Path_temp2得到已文件夹节点分类数组,格式如下[[2008-3-8],[2008-3-10],[2008-3-9]]


return self.Add_Tel_Path_temp2





#================================================================================


# 已文件夹为单位进行时间分割计算每日的话单总流量


# Method Name:AnalyseMethod_Countdayflow


# Author:xinkai Add:2008-3-10


#================================================================================


def AnalyseMethod_Countdayflow(self):





self.CountFlow = 0


#由线程类获得分析数组


self.AnalyseList = self.Thread_Contorl()


#print AnalyseList


for i in range(len(self.AnalyseList)):


self.CountFlow = 0


#print self.dict.keys()[i],AnalyseList[i]


#===============================================================================


# 此处需要加判断日期以及有效话单


#===============================================================================


for y in range(len(self.AnalyseList[i])):


#print AnalyseList[i][y]


self.AnalyseData = open(self.AnalyseList[i][y],'r')


self.CountFlow += len(self.AnalyseData.readlines())


#print self.dict.keys()[i]+str(len(AnalyseData.readlines()))+" "


print self.dict.keys()[i]+"当日数据总流量为:"+str(self.CountFlow)





#================================================================================


# 已文件夹为单位进行时间分割按照划定的时间片对每日话单分时流量进行统计


# Method Name:AnalyseMethod_CountTimeFlow


# Author:xinkai Add:2008-3-10


#================================================================================


def AnalyseMethod_CountTimeFlow(self):





Analyse_CountTimeFlow = open('Analyse_CountTimeFlow.log','w')


#由线程类获得分析数组


self.AnalyseList = self.Thread_Contorl()


for i in range(len(self.AnalyseList)):


temp = []


self.AnalyseStack = []


self.AnalyseStackSend = []


for y in range(len(self.AnalyseList[i])):


#已时间文件夹为分割点,分类读取话单进行分析


#用来计算每个文件中每个话单记录的时间堆栈


self.AnalyseData = open(self.AnalyseList[i][y],'r')


self.AnalyseStackSend.append(self.AnalyseData.readlines())


#用来计算基础时间轴的堆栈AnalyseStack


self.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)


for h in range(len(self.AnalyseList[i])):


for z in self.AnalyseStackSend[h]:


self.TelTime = self.ChageTime(z.split(',')[21])


#print str(self.TelTime)+"///"+str(self.ChangeBaseTime)


import math


#获得已基础时间为轴的时间差值


#print int(math.fabs(self.TelTime - self.ChangeBaseTime))/60


temp.append((int(math.fabs(self.TelTime - self.ChangeBaseTime))/60) / self.AnalyseTimeArea)


print self.dict.keys()[i]


Analyse_CountTimeFlow.writelines("话单时间:%s 初始时间片 时间片 分时流量 " % (self.dict.keys()[i]))


Analyse_CountTimeFlow.close()


for j in range(1440/int(self.AnalyseTimeArea)):


if temp.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)))





def ChageTime(self,datatime):





#初始化变量


self.YearMD = ""


self.TimeCS = ""





#引用时间参数


self.datatime = datatime


self.SplitDataTime1 = self.datatime.split(' ')


self.SplitDataTime2 = self.SplitDataTime1[0].split('/')


self.SplitDataTime3 = self.SplitDataTime1[1].split(':')


#分割结果['2008', '03', '10'] ['11', '18', '18']





#组合分割数据转换时间为整数


for i in self.SplitDataTime2:


self.YearMD += i


for h in self.SplitDataTime3:


self.TimeCS += h


self.newTime = self.YearMD + self.TimeCS


return int(self.newTime)





def __del__(self):


pass





class ControlThread(ThreadMain):





def __init__(self):





basepath,dict = self.Get_Path()


self.dict = dict


self.basepath = basepath





def Control_Thread(self):





#控制使用分析线程


print "-----------------------------------------"


ObjectThread = ThreadMain()


print "开始计算每日流量:"


ObjectThread.AnalyseMethod_Countdayflow()


print "计算结束"


print "-----------------------------------------"


import time


time.sleep(0.01)


print "开始计算分时流量:"


ObjectThread.AnalyseMethod_CountTimeFlow()


print "计算结束"


print "-----------------------------------------"





if __name__ == "__main__":





ObjectControl = ControlThread()


ObjectControl.Control_Thread()

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: