Python解析CDD文件的代碼詳解
前言
在實際診斷測試開發(fā)中,我們寫測試腳本會用到CDD文件中的診斷,常規(guī)做法可能是用到哪個就定義哪個,這樣做的弊端是有可能造成重復(fù)定義,或者整個工程中有不同的變量名,較為好的方式是頭文件中統(tǒng)一定義,如果人去單獨定義的話,CDD中診斷有比較多,浪費時間,所以基于這個需求,我想到了可以用Python 腳本解析CDD文件,統(tǒng)一定義,一鍵生成,十分快捷。
測試軟硬件環(huán)境:
Win10 X64
Python 3.8
PyQt5 5.16.5
基本介紹
1. 如下圖是工具的界面,輸入是cdd 文件,輸出 是 bwm_test_DiagRequest_Variables.cin,這個頭文件可以直接放在工程里,這樣用到哪個診斷就可以直接使用了,無需重復(fù)定義或者單獨定義

2.代碼簡單介紹
ParseCdd_Main.py是主函數(shù)所在文件cdd.py是解析cdd文件的邏輯處理文件parsecdd.py是 QtDesigner 生成的UI文件

3?? cdd文件結(jié)構(gòu)分析
- 打開cdd文件,看到是xml格式的,這就好辦了,那就一定能夠找到它的組成結(jié)構(gòu)的,找到后直接用lxml 庫去解析
- 核心代碼就這一行 ,可以字節(jié)跟著這個繼承關(guān)系去找找看
ecu = cddXML.xpath("//VAR//DIAGINST//SERVICE//SHORTCUTNAME/TUV/text()")

def parseCdd(self,filename):
cddXML = etree.parse(filename)
if cddXML:
ecu = cddXML.xpath("http://VAR//DIAGINST//SERVICE//SHORTCUTNAME/TUV/text()")
if ecu:
self.diagCan = ''
for i in ecu:
temp = i.replace("/","_").replace("#","_").replace(": ","_").replace(":","_").replace(" ","_").replace(" - ","_").replace("-","_").replace(" ","_")
self.diagCan = self.diagCan + "\n" + "diagRequest " + temp +" req_" + temp + ";"
self.diagCan = "variables\n{\n%s\n}"%self.diagCan
print(self.diagCan)
newFile = os.path.splitext(filename)[0] + '_DiagRequest_Variables.cin'
with open(newFile,'w') as f:
f.write(self.diagCan)
else:
print("parse cdd file failed!")
else:
print("parse file failed!")本節(jié)測試使用源碼放在Git上了,有需自取
https://github.com/yiyuchenguang/CANoeAbout.git
到此這篇關(guān)于Python解析CDD文件的文章就介紹到這了,更多相關(guān)Python解析CDD文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 最簡單的實現(xiàn)適配器設(shè)計模式的示例
這篇文章主要介紹了python 最簡單的實現(xiàn)適配器設(shè)計模式的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
django自帶的權(quán)限管理Permission用法說明
這篇文章主要介紹了django自帶的權(quán)限管理Permission用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python 創(chuàng)建子進程模塊subprocess詳解
這篇文章主要介紹了Python 創(chuàng)建子進程模塊subprocess詳解,本文詳細講解了subprocess模塊的方法、參數(shù)、使用實例等,需要的朋友可以參考下2015-04-04

