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

到此这篇关于Python解析CDD文件的文章就介绍到这了,更多相关Python解析CDD文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python解析CDD文件的代码详解

    目录 前言 基本介绍 前言 在实际诊断测试开发中,我们写测试脚本会用到CDD文件中的诊断,常规做法可能是用到哪个就定义哪个,这样做的弊端是有可能造成重复定义,或者整个工程中有不同的变量名,较为好的方式是头文件中统一定义,如果人去单独定义的话,CDD中诊断有比较多,浪费时间,所以基于这个需求,我想到了可以用Python 脚本解析CDD文件,统一定义,一键生成,十分快捷.测试软硬件环境:Win10 X64Python 3.8PyQt5 5.16.5 基本介绍 1. 如下图是工具的界面,输入是cdd

  • Python中使用pypdf2合并、分割、加密pdf文件的代码详解

    朋友需要对一个pdf文件进行分割,在网上查了查发现这个pypdf2可以完成这些操作,所以就研究了下这个库,并做一些记录.首先pypdf2是python3版本的,在之前的2版本有一个对应pypdf库. 可以使用pip直接安装: pip install pypdf2 官方文档: pythonhosted.org/PyPDF2/ 里面主要有这几个类: PdfFileReader . 该类主要提供了对pdf文件的读操作,其构造方法为: PdfFileReader(stream, strict=True,

  • Python中协程用法代码详解

    本文研究的主要是python中协程的相关问题,具体介绍如下. Num01–>协程的定义 协程,又称微线程,纤程.英文名Coroutine. 首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元. 为啥说他是一个执行单元,因为他自带CPU上下文.这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程. 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的. Num02–>协程和线程的差异 那么这个过程看起来和线程差不多.其实不然, 线程切换从系统层面远不止保存和恢复 CP

  • Python解析多帧dicom数据详解

    概述 pydicom是一个常用python DICOM parser.但是,没有提供解析多帧图的示例.本文结合相关函数和DICOM知识做一个简单说明. DICOM多帧数据存储 DICOM标准中关于多帧数据存储的最重要一部分说明是PS3.5 Annex A.4 A.4 Transfer Syntaxes For Encapsulation of Encoded Pixel Data. 无论何时,Pixel Data都存放在Pixel Data (7FE0,0010)中.有可能是直接存放的(nati

  • Python学习之文件的读取详解

    目录 文件读取的模式 文件对象的读取方法 使用 read() 函数一次性读取文件全部内容 使用 readlines() 函数 读取文件内容 使用 readline() 函数 逐行读取文件内容 mode().name().closed() 函数演示 文件读取小实战 with open() 函数 利用with open() 函数读取文件的小实战 上一章节 我们学习了如何利用 open() 函数创建一个文件,以及如何在文件内写入内容:今天我们就来了解一下如何将文件中的内容读取出去来的方法. 文件读取的

  • Python读写JSON文件的操作详解

    目录 JSON JSON 起源 JSON 样例 Python 原生支持 JSON 序列化 JSON 简单的序列化示例 JSON 反序列化 简单的反序列化示例 应用案例 编码和解码 JSON JSON 起源 JSON 全称 JavaScript Object Notation .是处理对象文字语法的 JavaScript 编程语言的一个子集.JSON 早已成为与语言无关的语言,并作为自己的标准存在. JSON 样例 { "data":[ { "id": "1

  • Python Matplotlib绘制动画的代码详解

    目录 matplotlib 动画 人口出生率 男女人口总数 雨滴 matplotlib 动画 我们想制作一个动画,其中正弦和余弦函数在屏幕上逐步绘制.首先需要告诉matplotlib我们想要制作一个动画,然后必须指定想要在每一帧绘制什么.一个常见的错误是重新绘制每一帧的所有内容,这会使整个过程非常缓慢.相反地,只能更新必要的内容,因为我们知道许多内容不会随着帧的变化而改变.对于折线图,我们将使用set_data方法更新绘图,剩下的工作由matplotlib完成. 注意随着动画移动的终点标记.原因

  • java使用Apache工具集实现ftp文件传输代码详解

    本文主要介绍如何使用Apache工具集commons-net提供的ftp工具实现向ftp服务器上传和下载文件. 一.准备 需要引用commons-net-3.5.jar包. 使用maven导入: <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </depend

  • Python简易计算器制作方法代码详解

    主要用到的工具是Python中的Tkinter库 比较简单 直接上图形界面和代码 引用Tkinter库 from tkinter import * 建立主窗口对象 window=Tk() #设置窗口对象 window.title('counting machine') window.geometry("350x280") window['bg']='red' 建立标签框以及标签(将运算字符串显示在上面) frame=LabelFrame(window,bg='yellow',width

  • python scrapy重复执行实现代码详解

    这篇文章主要介绍了python scrapy重复执行实现代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取 Scrapy模块: 1.scheduler:用来存放url队列 2.downloader:发送请求 3.spiders:提取数据和url 4.itemPipeline:数据保存 from twisted.internet i

随机推荐