日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁(yè) Python教程 正文

Python解析CDD文件的代碼詳解_python

作者:螞蟻小兵 ? 更新時(shí)間: 2022-07-15 Python教程

前言

在實(shí)際診斷測(cè)試開發(fā)中,我們寫測(cè)試腳本會(huì)用到CDD文件中的診斷,常規(guī)做法可能是用到哪個(gè)就定義哪個(gè),這樣做的弊端是有可能造成重復(fù)定義,或者整個(gè)工程中有不同的變量名,較為好的方式是頭文件中統(tǒng)一定義,如果人去單獨(dú)定義的話,CDD中診斷有比較多,浪費(fèi)時(shí)間,所以基于這個(gè)需求,我想到了可以用Python 腳本解析CDD文件,統(tǒng)一定義,一鍵生成,十分快捷。
測(cè)試軟硬件環(huán)境:
Win10 X64
Python 3.8
PyQt5 5.16.5

基本介紹

1. 如下圖是工具的界面,輸入是cdd 文件,輸出 是 bwm_test_DiagRequest_Variables.cin,這個(gè)頭文件可以直接放在工程里,這樣用到哪個(gè)診斷就可以直接使用了,無需重復(fù)定義或者單獨(dú)定義

2.代碼簡(jiǎn)單介紹

  • ParseCdd_Main.py 是主函數(shù)所在文件
  • cdd.py 是解析cdd文件的邏輯處理文件
  • parsecdd.py 是 QtDesigner 生成的UI文件

3?? cdd文件結(jié)構(gòu)分析

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

da

 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é)測(cè)試使用源碼放在Git上了,有需自取

https://github.com/yiyuchenguang/CANoeAbout.git

原文鏈接:https://blog.csdn.net/qq_34414530/article/details/124861979

欄目分類
最近更新