You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

106 lines
2.9 KiB

from time import time
import datetime
import xlrd
import os
import shutil
import re
import sys
import json
import numpy as np
from pandas import DataFrame;
import pandas as pd
from parsers.WriteToCsv import WriteBdcToCsv
class BdcParser:
def __init__(self, time, path):
self.m_time = time
self.m_path = path
self.m_logLine = {}
def __GetValue(self, value):
if value.isdigit():
return int(value)
else:
if value is None or value == "":
return ""
else:
#替换下逗号,存入csv
return value.replace(",",";")
def __ParserElement(self, element):
components = element.split("=")
if len(components) != 2:
print(f"__ParserElement error {element}")
return None, None
value = self.__GetValue(components[1])
key = components[0]
return key, value
def __AddLog(self, log):
type = log["event_id"]
if type in self.m_logLine.keys():
self.m_logLine[type].append(log)
else:
list = []
list.append(log)
self.m_logLine[type] = list
def __ParserLine(self, line):
line = line.replace("\n", "")
if len(line) == 0:
return
ret = {}
elements = line.split("|") #每个元素按|分割
if elements.count == 0:
return ret
ret["logtime"] = elements.pop(0) #第一个元素是时间戳
try:
timeArray = datetime.datetime.strptime(ret["logtime"], "%Y-%m-%d %H:%M:%S")
except :
print(f"__ParserLine logtime error {line}")
return
ret["timeStamp"] = int(timeArray.timestamp())
for element in elements:
key, value = self. __ParserElement(element)
if key == None or value == None:
print(f"__ParserLine error {line}")
continue
ret[key] = value
self.__AddLog(ret)
#解析每个日志文件
def Parser(self, path, filename):
print(f"Parser file {path}.........\n")
#读取
file = open(path, "r", encoding="UTF-8")
#
line = file.readline()
while line: #逐行解析
#print(f"Parser file {filename} line:{line}\n")
self.__ParserLine(line)
line = file.readline()
def __WriteCsv(self):
date = self.m_time.strftime("%Y-%m-%d")
for (inttype, logs) in self.m_logLine.items():
WriteBdcToCsv(inttype, logs, date)
def Parsers(self):
date = self.m_time.strftime("%Y-%m-%d")
fileRex = f"bdcSvr_{date}"
list = os.listdir(self.m_path)
for filename in list:
path = os.path.join(self.m_path, filename)
if os.path.isfile(path) and path.find(fileRex) != -1:
self.Parser(path, filename)
self.__WriteCsv()