python 處理Bus Hound 資料
阿新 • • 發佈:2019-01-03
工作中,經常要用到Bus Hound軟體用來除錯串列埠、USB等裝置,監聽PC端(window)跟裝置通訊。
如下圖,是用Bus Hound監聽到摸個裝置的資料,可以清楚的看到某個裝置傳送到PC或者PC傳送到裝置的資料。
Bus Hound可以把監聽到的資料儲存為文字檔案,如下圖
如上圖,開頭的一些是說明,列舉出了PC上存在的一些裝置,然後對各個資料項進行描述,如Data,就是傳輸的資料,這就是是我們需要的資料。
有時候在測試過程中對默寫命令進行測試,那就要要複製Bus hound監聽到的資料,當命令少於16位元組是,命令都在一行中,可以直接把全部複製出來,可是當命令大於16位元組是,命令就不止一行,當命令越大,佔用的行數也多,要把這命令複製出來就有點麻煩了,
有時候在測試過程中,要做個記錄,也要把某些命令包截取出來。
我之前做過腦殘的做法是先把非資料區刪除,然後再把資料區中資料前後不要的資料刪除,然後再組成完整的命令包;也想過直接把需要的資料一行一行得複製出來,這就需要在兩個文字檔案中進行,也怕出錯。
突然想到,可以寫個程式來處理, 用Python開啟原始檔,讀取資料區,然後擷取所要的資料,把資料儲存到新的檔案,程式碼如下,
import win32ui tar_file="target.txt" start = 0 end = 0 dlg = win32ui.CreateFileDialog(1) dlg.SetOFNInitialDir('') dlg.DoModal() filename = dlg.GetPathName() try: source = open(filename,"r+") except : source.close() exit() while 1: str = source.readline() if len(str)==0: print "break" break if str.find("Device Phase Data") == 0: start = str.find("Data") end = str.find("Description") source.readline() break target = "" while 1: str = source.readline() if len(str)==0: print "break" break temp = str[start:end] target = target +temp + "\n" try: tar = open(tar_file,"w") tar.write(target) except: tar.close() source.close() tar.close() exit()
處理前的檔案,
處理後的檔案,
說明
- 環境:win7 64位,python 2.7,
- 庫依賴:win32ui(pywin32-220.win-amd64-py2.7.exe)