python图形分析_使用Python图形化分析大Log文件
最近因?yàn)轫?xiàng)目需要經(jīng)常分析數(shù)據(jù)量很大的Log文件,以往靠手工目測(cè)的分析方法已不太可能快速分析和定位問(wèn)題。
由于和我一起做這個(gè)項(xiàng)目的同事,會(huì)使用Python,編寫(xiě)的Python腳本能夠?qū)og中的相關(guān)數(shù)據(jù)以圖形的方式顯示出來(lái),這樣就便于我們快速檢測(cè)出是否輸入、輸出有異常情況發(fā)生。
這樣,也就加快了解決問(wèn)題的效率。
為此,在這里簡(jiǎn)要記錄一下具體的方法,以便以后在需要的時(shí)候能夠做參考。
工具準(zhǔn)備
需要的工具如下:
Python(版本是2.7.3,自帶一個(gè)簡(jiǎn)單的IDE)
數(shù)值運(yùn)算庫(kù)numpy,matplotlib依賴這個(gè)庫(kù)
類似matlab的圖形庫(kù)matplotlib
文本編輯工具sed
有了這些工具,還需要了解一些正則表達(dá)式,可參看這里。
當(dāng)然,基本的Python腳本編程功底的需要的。網(wǎng)上關(guān)于Python的教程有很多,我參考了如下幾篇:
從這幾天學(xué)習(xí)的效果來(lái)看,Python應(yīng)該算是比較容易上手的語(yǔ)言。
可能是Python里面的語(yǔ)法和概念和C++有相似之處,所以很多語(yǔ)法基本只有了解一下怎么寫(xiě)就可以了。
其中,列表、序列、字典這幾種Python中的數(shù)據(jù)結(jié)構(gòu)要用熟,另外,在Python中不需要再關(guān)心數(shù)據(jù)的類型,直接用就好了。
終于體會(huì)到一點(diǎn)“學(xué)好C++之后再學(xué)其他語(yǔ)言要相對(duì)容易”的感覺(jué)。
看了上述的教程,現(xiàn)在寫(xiě)一些簡(jiǎn)單的腳本也是很容易的了。
分析Log文件的過(guò)程
編寫(xiě)批處理文件,使用Sed命令從Log文件中提取出需要的數(shù)據(jù),將所有匹配數(shù)據(jù)所在的行都打印出來(lái),寫(xiě)并到其他的文件中
參考下面的代碼,其中,Sed命令中引號(hào)的內(nèi)容為要匹配文本的正則表達(dá)式,正則表達(dá)式在兩個(gè)斜杠之間,后面的p是打印的命令,Sed命令執(zhí)行的結(jié)果被重定向到后面的文件中。
del /f/s/q Video.txtdel /f/s/q Audio.txtdel /f/s/q VideoRecv.txtdel /f/s/q AudioRecv.txtdel /f/s/q videopts.txtdel /f/s/q audiopts.txtsed -n "/Video.*New Frame/p" tsmux.txt>>Video.txtsed -n "/Audio.*New Frame/p" tsmux.txt>>Audio.txtsed -n "/nType : ESTYPE_VIDEO/p" tsmux.txt>>VideoRecv.txtsed -n "/nType : ESTYPE_AUDIO/p" tsmux.txt>>AudioRecv.txtsed -n "/origin pts: .*, video/p" tsmux.txt>>videopts.txtsed -n "/origin pts: .*, audio/p" tsmux.txt>>audiopts.txt
這個(gè)批處理的腳本要和要分析的Log文件放在同一文件夾下,這樣雙擊執(zhí)行腳本,文件夾中會(huì)多了5個(gè)文件,這幾個(gè)文件就是我們下面Python腳本需要用到的。
編寫(xiě)分析Log數(shù)據(jù)的Python腳本,該腳本運(yùn)行后會(huì)以圖形的方法顯示出相關(guān)數(shù)據(jù)的分析結(jié)果
下面這個(gè)例子要完成的功能就是前端輸入PTS的總體趨勢(shì)是否正確,有無(wú)明顯跳變。
import reimport matplotlib.pyplot as pltprint "analyse video input pts!..."regex = re.compile('video pts : (\d+)')regex1 = re.compile('audio pts : (\d+)')video_index = []video_pts = []'''file = open("videopts.txt", "rb")log = file.readline()while log:found = regex.search(log)if found:video_index.append(len(video_index))video_pts.append(found.group(1))log = file.readline()file.close()'''file = open("videopts.txt", "rb")log = file.read()file.close()m = regex.findall(log)if m:print "video match success"for pts in m:video_index.append(len(video_index))video_pts.append(pts)else:print "not match"audio_index = []audio_pts = []file1 = open("audiopts.txt", "rb")log1 = file1.read()file1.close()m1 = regex1.findall(log1)if m1:print "audio match success"for pts1 in m1:audio_index.append(len(audio_index))audio_pts.append(pts1)else:print "audio not match"print "begin to plot"fig = plt.figure()video_pts_plot = fig.add_subplot(211)video_pts_plot.plot(video_index, video_pts, 'r')audio_pts_plot = fig.add_subplot(212)audio_pts_plot.plot(video_index, video_pts, 'b')plt.show()
運(yùn)行這個(gè)Python腳本后,可看到輸入的Video/Audio PTS以圖形的方式被顯示出來(lái)。
在這個(gè)例子中,我們可以看到要使用到Python的正則表達(dá)式庫(kù)re,圖形繪制庫(kù)matplotlib,還需要了解python中文件的操作,列表的使用等。
具體的用法請(qǐng)google其他資料。
(完)
總結(jié)
以上是生活随笔為你收集整理的python图形分析_使用Python图形化分析大Log文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人工智能、深度学习和机器学习有哪些区别?
- 下一篇: Python基础 | 快速实现label