1、通过函数实现:
import time
def process(input1_alarm, input2_cdr):
"""
开发一个小工具:
对告警发生时间点前后1一个小时内(含1个小时)的进行统计和分析,并把分析结果保存到output.txt 文件内
:param input1_alarm: 告警文件: 附件alarm.txt文件有2条告警,其中Name: Abnormal income代表的是收入异常的告警,2019-04-03 17:46:54代表的是告警发生时的时间
:param input2_cdr: 话单文件: 每行代表一条计费,每条计费以|分割,第2个字段代表计费的时间(年月日时分秒),第24个字段代表计费结果(0为正常,其余为异常)。
:return: 统计结果字典
"""
# 方法1:获取告警发生时间:
f = open(input1_alarm, 'r')
ls = []
for line in f:
ls.append(line.strip('
'))
# print(ls)
f.close()
# 列表中查找元素并返回索引
index = ls.index('Occurrence Time:')
accureTime = ls[index+1]
print(accureTime)
#方法2:过滤话单文件:对告警发生时间点前后1一个小时内(含1个小时)的话单
# 将格式自字符串转换为时间戳,获取异常起始时间段
'''
time.mktime(tupletime):接受时间元组并返回时间戳(1970纪元后经过的浮点秒数)。
time.strptime(str,fmt='%a %b %d %H:%M:%S %Y'):根据fmt的格式把一个时间字符串解析为时间元组。
'''
# 返回时间戳T1
t1 = time.mktime(time.strptime(accureTime, '%Y-%m-%d %H:%M:%S'))
# 返回起始时间 前后一小时 当地时间格式:
# print(t1-3600, t1+3600)
'''
time.localtime([secs] 接收时间戳并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
time.strftime(fmt[,tupletime]) 接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
'''
start_time = time.strftime('%Y%m%d%H%M%S', time.localtime(t1 - 3600))
print(int(start_time))
end_time = time.strftime('%Y%m%d%H%M%S', time.localtime(t1 + 3600))
print(int(end_time))
# 转换话单文件为列表,获取目标时间段和对应的错误码
cdr = open(input2_cdr)
cdr_list = []
cdr_time_result = []
cdr_error_result = []
result = {}
for line in cdr:
cdr_list.append(line.strip('
'))
# print(cdr_list)
for i in range(len(cdr_list)):
ls_line = cdr_list[i].split('|')
# 过滤出符合条件的时间和错误码
if int(start_time) <= int(ls_line[1]) <= int(end_time):
cdr_time_result.append(ls_line[1])
cdr_error_result.append(ls_line[23])
print(cdr_time_result)
print(cdr_error_result)
cdr.close()
# 统计列表元素出现的个数,并返回字典
for i in cdr_error_result:
result[i] = cdr_error_result.count(i)
print(result)
out_result = open('output.txt', 'w')
out_result.write(str(result))
out_result.close()
return result
if __name__ == '__main__':
process('input1_alarm.txt', 'input2_cdr.txt')
2、通过类实现:
import time
"""
日志分析小工具:
对告警发生时间点前后1一个小时内(含1个小时)的进行统计和分析,并把分析结果保存到output.txt 文件内
:param input1_alarm: 告警文件: 附件alarm.txt文件有2条告警,其中Name: Abnormal income代表的是异常的告警,2019-04-03 17:46:54代表的是告警发生时的时间
:param input2_cdr: 话单文件: 每行代表一条计费,每条计费以|分割,第2个字段代表计费的时间(年月日时分秒),第24个字段代表计费结果(0为正常,其余为异常)。
:return: 统计结果字典
设计思路:
面向对象
类 Log_finder
方法1:获取告警发生时间
方法2:获取统计时间段:计算异常告警发生时间点的前后1一个小时
方法3:获取目标时间段和对应的错误码并返回结果
"""
class Log_finder():
def __init__(self, input1_alarm, input2_cdr):
self.alarmFile = input1_alarm
self.cdrFile = input2_cdr
self.alarmList = []
self.cdr_list = []
self.cdr_time_result = []
self.cdr_error_result = []
self.result = {}
def getAlarmTime(self):
f = open(self.alarmFile, 'r')
for line in f:
self.alarmList.append(line.strip('
'))
print(self.alarmList)
f.close()
index = self.alarmList.index('Occurrence Time:')
self.accureTime = self.alarmList[index + 1]
return self.accureTime
def getTimeRange(self, accuretime):
t1 = time.mktime(time.strptime(accuretime, '%Y-%m-%d %H:%M:%S'))
self.start_time = time.strftime('%Y%m%d%H%M%S', time.localtime(t1 - 3600))
self.end_time = time.strftime('%Y%m%d%H%M%S', time.localtime(t1 + 3600))
return self.start_time, self.end_time
def getcdrList(self):
cdr = open(self.cdrFile)
for line in cdr:
self.cdr_list.append(line.strip('
'))
print(self.cdr_list)
cdr.close()
return self.cdr_list
def getErrorList(self, cdrlist):
self.getAlarmTime()
self.getTimeRange(self.accureTime)
self.getcdrList()
for i in range(len(cdrlist)):
ls_line = self.cdr_list[i].split('|')
# 过滤出符合条件的时间和错误码
if int(self.start_time) <= int(ls_line[1]) <= int(self.end_time):
self.cdr_time_result.append(ls_line[1])
self.cdr_error_result.append(ls_line[23])
print(self.cdr_time_result, self.cdr_error_result)
def OutPut(self):
self.getErrorList(self.cdr_list)
# 统计列表元素出现的个数,并返回字典
for i in self.cdr_error_result:
self.result[i] = self.cdr_error_result.count(i)
print(self.result)
out_result = open('output.txt', 'w')
out_result.write(str(self.result))
out_result.close()
return self.result
if __name__ == '__main__':
logResult = Log_finder('input1_alarm.txt', 'input2_cdr.txt')
logResult.OutPut()
3、结果输出:
2019-04-03 17:46:54
20190403164654
20190403184654
['20190403164654', '20190403164655', '20190403164656', '20190403164657', '20190403164658', '20190403164659', '20190403164659', '20190403164700', '20190403164701', '20190403164702', '20190403164703', '20190403164704', '20190403164705', '20190403164706', '20190403164707', '20190403164708', '20190403164709', '20190403164710', '20190403164711', '20190403164712', '20190403164713', '20190403164714', '20190403164715', '20190403164716', '20190403164717', '20190403164718', '20190403164719', '20190403164720', '20190403164721', '20190403164722', '20190403164723', '20190403164724', '20190403164725', '20190403164726', '20190403164727', '20190403164728', '20190403164729', '20190403164730', '20190403164731', '20190403164732', '20190403164733', '20190403164734', '20190403164735', '20190403164736', '20190403164737', '20190403164738', '20190403164739', '20190403164740', '20190403164741', '20190403164742', '20190403164743', '20190403164744', '20190403164745', '20190403164746', '20190403164747', '20190403164748', '20190403164749', '20190403164750', '20190403164751', '20190403164752', '20190403164753', '20190403164754', '20190403164755', '20190403164756', '20190403164757', '20190403164758', '20190403164759', '20190403164759', '20190403174654', '20190403174655', '20190403174656', '20190403174657', '20190403174658', '20190403174659', '20190403174659', '20190403174700', '20190403174701', '20190403174702', '20190403174703', '20190403174704', '20190403174705', '20190403174706', '20190403174707', '20190403174708', '20190403174709', '20190403174710', '20190403174711', '20190403174712', '20190403174713', '20190403174714', '20190403174715', '20190403174716', '20190403174717', '20190403174718', '20190403174719', '20190403174720', '20190403174721', '20190403174722', '20190403174723', '20190403174724', '20190403174725', '20190403174726', '20190403174727', '20190403174728', '20190403174729', '20190403174730', '20190403174731', '20190403174732', '20190403174733', '20190403174734', '20190403174735', '20190403174736', '20190403174737', '20190403174738', '20190403174739', '20190403174740', '20190403174741', '20190403174742', '20190403174743', '20190403174744', '20190403174745', '20190403174746', '20190403174800', '20190403174801', '20190403174802', '20190403174803', '20190403174804', '20190403174805', '20190403174806', '20190403174807', '20190403174808', '20190403174809', '20190403174810', '20190403174811', '20190403174812', '20190403174813', '20190403174814', '20190403174815', '20190403174816', '20190403174817', '20190403174818', '20190403174819', '20190403175100', '20190403175101', '20190403175102', '20190403175103', '20190403175104', '20190403175105', '20190403175106', '20190403175107', '20190403175108', '20190403175109', '20190403175110', '20190403175203', '20190403175204', '20190403175205', '20190403175206', '20190403175207', '20190403175208', '20190403175209', '20190403175210', '20190403175211', '20190403175212', '20190403175213', '20190403175214', '20190403175215', '20190403175216', '20190403175217', '20190403175218', '20190403175219', '20190403175220', '20190403175221', '20190403175222', '20190403175223', '20190403175224', '20190403175225', '20190403180025', '20190403180026', '20190403180027', '20190403180028', '20190403180029', '20190403180030', '20190403180031', '20190403180032', '20190403180033', '20190403180034', '20190403180035', '20190403180036', '20190403180037', '20190403180038', '20190403180039', '20190403180040', '20190403180041', '20190403180042', '20190403180043', '20190403180044', '20190403180100', '20190403180101', '20190403180102', '20190403180103', '20190403180104', '20190403180105', '20190403180106', '20190403180107', '20190403180108', '20190403180109', '20190403180110', '20190403180111', '20190403180112', '20190403180113', '20190403180114', '20190403180115', '20190403184650', '20190403184651', '20190403184652', '20190403184653', '20190403184654']
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100', '100', '126', '1002', '100', '100', '100', '100']
{'0': 87, '100': 94, '126': 18, '1002': 18}
