1. 程式人生 > >python 處理Bus Hound 資料

python 處理Bus Hound 資料

工作中,經常要用到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)