Heim > Artikel > Backend-Entwicklung > Python analysiert Protokolldateien im XML-Format
Guten Tag allerseits. Da ich während des chinesischen Neujahrs nicht in meinen Normalzustand zurückgekehrt bin, habe ich schon lange keine Welle des Wissens mehr geteilt. Heute werde ich weiterhin eine kleine Welle mit euch teilen Skripte zum Parsen von Protokollen in Python.
Schauen wir uns zunächst einmal an, wie das Protokoll aussieht.
Sie sind alle im XML-Format, wenn Sie sie nur ansehen. ? Es ist in Ordnung, lass es uns zuerst analysieren.
1. Der Anfang jedes Absatzes ist catalina-exec, daher werden wir ihn nach dem Teilen in Absätze unterteilen.
2. Dann teilen wir es in die Segmente auf, die Sie segmentieren möchten, und finden die Schlüsselwörter, die Sie segmentieren möchten. Da es sich um XML handelt, handelt es sich bei der nächsten Arbeit um einen einzigen Header .
3. Es ist jedoch möglich, dass einige von ihnen nicht die gewünschten Schlüsselwörter haben. Wenn es kein solches Feld gibt, werde ich dieses Feld auf leer setzen .
Wenn die Ideen klar sind, wird der Code natürlich einfacher.
Als nächstes schauen wir uns den Code an
#coding:utf-8 import re #文本所在TXT文件 file = 'iag_interface.log' #分割一段 xml1='catalina-exec' xml2='catalina-exec' #关键字reqtimestamp time1 = '<timestamp>' time2 = '</timestamp>' #关键字functionid functionid1 = '<functionid>' functionid2 = '</functionid>' #关键字transid transid1='<transid>' transid2='</transid>' #关键字siappid siappid1='<siappid>' siappid2='</siappid>' #关键字userid userid1='<userid>' userid2='</userid>' #关键字mobnum mobnum1='<mobnum>' mobnum2='</mobnum>' f = open(file,'r',encoding= 'utf-8') #f = open(file,'r') #for (num,value) in enumerate(f): #print("line number",num,"is:",value) buff = f.read() #清除换行符,请取消下一行注释 #buff = buff.replace('\n','') pat = re.compile(time1+'(.*?)'+time2,re.S) pat1 = re.compile(functionid1+'(.*?)'+functionid2,re.S) pat2 = re.compile(transid1+'(.*?)'+transid2,re.S) pat3 = re.compile(siappid1+'(.*?)'+siappid2,re.S) pat4 = re.compile(userid1+'(.*?)'+userid2,re.S) pat5 = re.compile(mobnum1+'(.*?)'+mobnum2,re.S) pat6=re.compile(xml1+'(.*?)'+xml2,re.S) result6 = pat6.findall(buff) print(len(result6)) x = open("logfx.txt", 'w') x.write("===========================开始数据================================="+"\n") x.write("time"+"\t"+"functionid"+"\t"+"transid"+"\t"+"siappid"+"\t"+"userid"+"\t"+"mobnum"+"\n") for i in range(0,len(result6)): result = pat.findall(result6[i]) result1 = pat1.findall(result6[i]) result2 = pat2.findall(result6[i]) result3 = pat3.findall(result6[i]) result4 = pat4.findall(result6[i]) result5 = pat5.findall(result6[i]) if len(result)==0: result.append("空") if len(result1)==0: result1.append("空") if len(result2)==0: result2.append("空") if len(result3)==0: result3.append("空") if len(result4)==0: result4.append("空") if len(result5)==0: result5.append("空") #print(result[0],"=",result1[0],"=",result2[0],"=",result3[0],"=",result4[0],"=",result5[0]) x.write("timestamp:"+result[0]+"\t"+result1[0]+"\t"+result2[0]+"\t"+result3[0]+"\t"+result4[0]+"\t"+"mobnum:"+result5[0]+"\n") x.write("===========================结束数据================================="+"\n") print("执行完毕!生成文件logfx.txt") x.close()
Führen Sie den Code aus
Python hat Protokolldateien basierend auf dem XML-Format analysiert und alle Daten erfolgreich ausgeführt. Überprüfen Sie anschließend die Datei
Okay.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er zum Lernen aller beiträgt. Ich hoffe auch, dass jeder die PHP-Chinesisch-Website unterstützt.
Weitere Artikel zum Parsen von Protokolldateien im XML-Format in Python finden Sie auf der chinesischen PHP-Website!