Python解析CDD文件的代码详解
作者:蚂蚁小兵 发布时间:2021-07-04 23:10:19
标签:Python,解析,CDD
前言
在实际诊断测试开发中,我们写测试脚本会用到CDD文件中的诊断,常规做法可能是用到哪个就定义哪个,这样做的弊端是有可能造成重复定义,或者整个工程中有不同的变量名,较为好的方式是头文件中统一定义,如果人去单独定义的话,CDD中诊断有比较多,浪费时间,所以基于这个需求,我想到了可以用Python 脚本解析CDD文件,统一定义,一键生成,十分快捷。
测试软硬件环境:
Win10 X64
Python 3.8
PyQt5 5.16.5
基本介绍
1. 如下图是工具的界面,输入是cdd 文件,输出 是 bwm_test_DiagRequest_Variables.cin
,这个头文件可以直接放在工程里,这样用到哪个诊断就可以直接使用了,无需重复定义或者单独定义
2.代码简单介绍
ParseCdd_Main.py
是主函数所在文件cdd.py
是解析cdd文件的逻辑处理文件parsecdd.py
是 QtDesigner 生成的UI文件
3️⃣ cdd文件结构分析
打开cdd文件,看到是xml格式的,这就好办了,那就一定能够找到它的组成结构的,找到后直接用lxml 库去解析
核心代码就这一行 ,可以字节跟着这个继承关系去找找看
ecu = cddXML.xpath("//VAR//DIAGINST//SERVICE//SHORTCUTNAME/TUV/text()")
def parseCdd(self,filename):
cddXML = etree.parse(filename)
if cddXML:
ecu = cddXML.xpath("//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!")
本节测试使用源码放在Git上了,有需自取
https://github.com/yiyuchenguang/CANoeAbout.git
来源:https://blog.csdn.net/qq_34414530/article/details/124861979


猜你喜欢
- 目录一、数据库引擎1.1 查看数据库引擎1.2 修改默认数据库引擎二、数据库字符集2.1 查看字符集2.2 修改字符集一、数据库引擎1.1
- NOMONEYDAY123114321-45324212-102250331008为了符合阅读习惯,最终报表希望是如下格式:NOMONTUE
- Elastic Security 为分析人员提供了预防,检测和响应威胁的手段。 该解决方案解决了SIEM,endpoint,威胁搜寻等安全用
- 为了区分选择与未选择区域,,将已选择区域的文本背景色设置为浅蓝色是个很做法。设置的路径在 Editor > Color Scheme
- 注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦,全部是我自己写的,用到了系统的SysColumns(一)行转列的方法先说说行转
- 简单使用csv.DictReader()方法示例代码1:import csvf = open('sample','r
- 如何使用快捷键按出代码提示框更新win10,发现可以改取消ctrl + space快捷键的占用了!!!我们在平时写代码的时候难免会出现敲错字
- 一、Python中的对象Python中一切皆是对象。————Guido van Rossum(1989)这句话只要你学过python,你就很
- 本文实例讲述了JS创建对象的写法。分享给大家供大家参考,具体如下:写法1:<script>var database = func
- 目录题目描述示例 1:示例 2:示例 3:单向构造(哈希表计数)双向构造(双指针)最后题目描述这是 LeetCode 上的 1743. 从相
- 本文实例为大家分享了微信小程序实现多文件或者图片上传的具体代码,供大家参考,具体内容如下html<view class="l
- Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。分页一般和表格一起用,分页链接作为表格的一部分,将分页链
- 将Copy of ********.bmp或者Copy of Copy of ********.bmp 此类文件统一命名为********0
- 了解如何 在sublime编辑器中安装python软件包,以 实现自动完成等功能,并在sublime编辑器本身中运行build。安装Subl
- 关于 Python requests ,在使用中,总结了一些小技巧把,记录下。1:保持请求之间的Cookies,我们可以这样做。
- 凡事预则立,不预则废,训练机器学习模型也是如此。数据清洗和预处理是模型训练之前的必要过程,否则模型可能就废了。本文是一个初学者指南,将带你领
- 定义通用视图修改 book/models.py 代码中的 AuthorInfo 类,如果一致则不必修改class AuthorInfo(mo
- 如下所示:(x,y)为要转的点,(pointx,pointy)为中心点,如果顺时针角度为anglesrx = (x-pointx)*cos(
- Python装饰器用法Python的装饰器是个好东西,它能干很多事情。但对于新手,它看起来似乎没那么简单。但事实上,装饰器本身也只是个函数。
- 我就废话不多说啦,还是直接看代码吧!try: print(a)except Exception as e: prin