【Python】Python读Excel文件生成xml文件

目录

​前言

正文

1.Python基础学习

2.Python读取Excel表格

2.1安装xlrd模块

2.2使用介绍

2.2.1常用单元格中的数据类型

2.2.2 导入模块

2.2.3打开Excel文件读取数据

2.2.4常用函数

2.2.5代码测试

2.2.6 Python操作Excel官方网址

3.Python创建xml文件

3.1 xml语法学习

3.2创建xml文件

3.3 代码测试

4.解决问题

5.总结


​前言

ECU诊断工作,需要实现的DTC(Diagnostic trouble code)接近500个,每个DTC的配置项基本类似。也就是说需要在AUTOSAR工具上重复手动配置500个DTC。AUTOSAR工具还非常的卡。

分析整个操作过程为:Excel表格读取一个DTC码-->ISOLAR工具中手动配置一个DTC-->重复500次 --> 最后生成配置文件Dem_Config.axml.

Axml文件中每一项DTC的配置内容如下,基本就是修改DTC码。

基于以上重复且有规律的工作需求,考虑使用Python脚本搞定。

正文

1.Python基础学习

推荐菜鸟教程:https://www.runoob.com/python3/python3-install.html

整个学习过程推荐两到3天完成。

2.Python读取Excel表格

python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。这里只用到xlrd模块。

2.1安装xlrd模块

命令行:pip install xlrd

2.2使用介绍

2.2.1常用单元格中的数据类型

0: empty, 

1: string(text), 

2:number, 3:date, 

4: boolean, 

5: error, 

b: blank(空白)

2.2.2 导入模块

Import xlrd

2.2.3打开Excel文件读取数据

Data = xlrd.open_workbook(r’filename’)

2.2.4常用函数

Excel当中最重要的就是对book(工作簿)和sheet(工作表)的操作

1)获取book中一个工作表

table = data.sheets()[0]     #通过索引顺序获取
table = data.sheet_by_index(sheet_indx))   #通过索引顺序获取
table = data.sheet_by_name(sheet_name)  #通过名称获取

以上三个函数都会返回一个xlrd.sheet.Sheet()对象

names = data.sheet_names() #返回book中所有工作表的名字
data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕

2)行的操作

nrows = table.nrows #获取该sheet中的有效行数
table.row(rowx) #返回由该行中所有的单元格对象组成的列表
table.row_slice(rowx) #返回由该列中所有的单元格对象组成的列表
table.row_types(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据类型组成的列表
table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表
table.row_len(rowx) #返回该列的有效单元格长度

3)列的操作

ncols = table.ncols #获取列表的有效列数
table.col(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据类型组成的列表
table.col_values(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据组成的列表
 

4)单元格的操作

table.cell(rowx,colx) #返回单元格对象
table.cell_type(rowx,colx) #返回单元格中的数据类型
table.cell_value(rowx,colx) #返回单元格中的数据

2.2.5代码测试

测试Excel表格

测试代码:

#!/usr/bin/env python
import xlrd
​
data = xlrd.open_workbook(r'.\book.xlsx')
​
def xlrd_read():table = data.sheets()[0]     #通过索引顺序获取第一个sheet1
#行操作print("There are %s rows in sheet1" %(table.nrows))      #获取该sheet中的有效行数print("Return type of table.row(): ", type(table.row(0)))   #返回由该行中所有的单元格对象组成的列表print("Items of row 1 on shee1: ", table.row(1))     #第2行列表元素print("Items of row 2 on sheet1: ", table.row_slice(2))     #返回由该行中所有的单元格对象组成的列表print(table.row_types(1, start_colx=0, end_colx=None))  #返回由该行中所有单元格的数据类型组成的列表print(table.row_values(1, start_colx=0, end_colx=None))  #返回由该行中所有单元格的数据组成的列表print("Length of row 2: ", table.row_len(1))  #返回该行的有效单元格长度#列操作print("There are %s columns in sheet1" %(table.ncols)) #获取列表的有效列数print(table.col(0, start_rowx=0, end_rowx=None))    #返回由该列中所有的单元格对象组成的列表print(table.col_slice(0, start_rowx=0, end_rowx=None))  # 返回由该列中所有的单元格对象组成的列表print(table.col_types(0, start_rowx=0, end_rowx=None))  # 返回由该列中所有单元格的数据类型组成的列表print(table.col_values(0, start_rowx=0, end_rowx=None))  # 返回由该列中所有单元格的数据组成的列表#单元格操作print(table.cell(1, 1))  # 返回单元格对象print(table.cell_type(1, 1))  # 返回单元格中的数据类型print(table.cell_value(1, 1))  # 返回单元格中的数据
def main():xlrd_read()
if __name__ == '__main__':main()
 

测试结果

2.2.6 Python操作Excel官方网址

http://www.python-excel.org/

3.Python创建xml文件

3.1 xml语法学习

https://www.runoob.com/xml/xml-tutorial.html

3.2创建xml文件

ElementTree是python的XML处理模块,它提供了一个轻量级的对象模型。它在Python2.5以后成为Python标准库的一部分,但是Python2.4之前需要单独安装。在使用ElementTree模块时,需要import xml.etree.ElementTree的操作。

ElementTree表示整个XML节点树,而Element表示节点数中的一个单独的节点。

构建XML文件

ElementTree(tag),其中tag表示根节点,初始化一个ElementTree对象。

Element(tag, attrib={}, **extra)函数用来构造XML的一个根节点,其中tag表示根节点的名称,attrib是一个可选项,表示节点的属性。

SubElement(parent, tag, attrib={}, **extra)用来构造一个已经存在的节点的子节点。

Element.text和SubElement.text表示element对象的额外的内容属性,Element.tag和Element.attrib分别表示element对象的标签和属性。

ElementTree.write(file, encoding='us-ascii', xml_declaration=None, default_namespace=None, method='xml'),函数新建一个XML文件,并且将节点数数据写入XML文件中。

3.3 代码测试

import xml.etree.ElementTree as ET
​
def buildNewsXmlFile():# 设置一个新节点,并设置其标签为rootroot = ET.Element("root")# 在root下新建两个子节点,设置其名称分别为sina和chinabytesina = ET.SubElement(root, "sina")chinabyte = ET.SubElement(root, "chinabyte")# 在sina下新建两个子节点,设置其节点名称分别为number和firstsina_number = ET.SubElement(sina, "number")sina_number.text = "1"sina_first = ET.SubElement(sina, "first")sina_first.text = "http://roll.tech.sina.com.cn/internet_all/index_1.shtml"# 在chinabyte下新建两个子节点,设置其节点名称为number和firstchinabyte_number = ET.SubElement(chinabyte, "number")chinabyte_number.text = "1"chinabyte_first = ET.SubElement(chinabyte, "first")chinabyte_first.text = "http://www.chinabyte.com/more/124566.shtml"# 将节点数信息保存在ElementTree中,并且保存为XML格式文件RawText = ET.tostring(root)dom = minidom.parseString(RawText)f = open(r'.\Test_4.axml', 'w', encoding='utf-8')dom.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='utf-8')f.close()def main():# xml_read()# xml_write()#xml_create()buildNewsXmlFile()if __name__ == '__main__':main()

4.解决问题

读取Excel表格提取需要的数据 --> 缓存数据 --> 遍历没有给数据生成xml文件 --> 合并到配置文件当值 --> 完成所有配置

#!/usr/bin/env python
import xlrd
import xml.etree.ElementTree as ET
​
from xml.dom import minidom
​
ExcelPath = r'.\FileName.xlsx'
First_Dtc_RowNum = 25
Last_Dtc_RowNum = 456
DtcCodeHexStr = []
DtcCodeDemStr = []
​
def OpenExcel():global DtcCodeHexStrglobal DtcCodeDemStrdata = xlrd.open_workbook(ExcelPath)table = data.sheet_by_name('DTC')DtcCodeHexStr = table.col_values(2, start_rowx=First_Dtc_RowNum, end_rowx=Last_Dtc_RowNum)for HexStr in DtcCodeHexStr:int_10 = int(str(HexStr), 16)int_10_str = str(int_10)DtcCodeDemStr.append(int_10_str)print("Type of DtcCodeHexStr = ",type(DtcCodeHexStr))print("DtcCodeHexStr = ",DtcCodeHexStr)print("Type of DtcCodeDemStr = ", type(DtcCodeDemStr))print("DtcCodeDemStr = ", DtcCodeDemStr)
​
def CreatDemDtcXml():global First_Dtc_RowNumglobal Last_Dtc_RowNumglobal DtcCodeHexStrglobal DtcCodeDemStrCONTAINERS = ET.Element("CONTAINERS")for i in range(Last_Dtc_RowNum - First_Dtc_RowNum):EcuContainrValue = ET.SubElement(CONTAINERS, "ECUC-CONTAINER-VALUE")ET.SubElement(EcuContainrValue, "SHORT-NAME").text = "DemDTC_" + DtcCodeHexStr[i]ET.SubElement(EcuContainrValue, "DEFINITION-REF", {"DEST": "ECUC-PARAM-CONF-CONTAINER-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC"ParameterValues =  ET.SubElement(EcuContainrValue, "PARAMETER-VALUES")EcucTextualParamValue = ET.SubElement(ParameterValues, "ECUC-TEXTUAL-PARAM-VALUE")ET.SubElement(EcucTextualParamValue, "DEFINITION-REF",{"DEST":"ECUC-ENUMERATION-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC/DemDTCSeverity"ET.SubElement(EcucTextualParamValue, "VALUE").text = "DEM_SEVERITY_NO_SEVERITY"EcuNumerivalParamValue = ET.SubElement(ParameterValues, "ECUC-NUMERICAL-PARAM-VALUE")ET.SubElement(EcuNumerivalParamValue, "DEFINITION-REF", {"DEST":"ECUC-INTEGER-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC/DemDtcValue"ET.SubElement(EcuNumerivalParamValue, "VALUE").text = DtcCodeDemStr[i]ReferenceValues = ET.SubElement(EcuContainrValue, "REFERENCE-VALUES")EcucReferenceValue = ET.SubElement(ReferenceValues, "ECUC-REFERENCE-VALUE")ET.SubElement(EcucReferenceValue, "DEFINITION-REF",{"DEST":"ECUC-REFERENCE-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC/DemDTCAttributesRef"ET.SubElement(EcucReferenceValue, "VALUE-REF",{"DEST":"ECUC-CONTAINER-VALUE"}).text = "/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet_0/DemDTCAttributes"RawText = ET.tostring(CONTAINERS)dom = minidom.parseString(RawText)f = open(r'.\DemDtc.axml', 'w', encoding='utf-8')dom.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='utf-8')f.close()def CreatDemEventParameterXml():global First_Dtc_RowNumglobal Last_Dtc_RowNumglobal DtcCodeHexStrglobal DtcCodeDemStrCONTAINERS = ET.Element("CONTAINERS")for i in range(Last_Dtc_RowNum - First_Dtc_RowNum):EcuContainrValue = ET.SubElement(CONTAINERS, "ECUC-CONTAINER-VALUE")ET.SubElement(EcuContainrValue, "SHORT-NAME").text = "DemEventParameter_" + DtcCodeHexStr[i]ET.SubElement(EcuContainrValue,"DEFINITION-REF").text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter"ParameterValues = ET.SubElement(EcuContainrValue, "PARAMETER-VALUES")EcucNumericalParamValue_0 = ET.SubElement(ParameterValues, "ECUC-NUMERICAL-PARAM-VALUE")ET.SubElement(EcucNumericalParamValue_0, "DEFINITION-REF", {"DEST": "ECUC-INTEGER-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemEventFailureCycleCounterThreshold"ET.SubElement(EcucNumericalParamValue_0, "VALUE").text = "1"EcucTextualParamValue_0 = ET.SubElement(ParameterValues, "ECUC-TEXTUAL-PARAM-VALUE")ET.SubElement(EcucTextualParamValue_0, "DEFINITION-REF", {"DEST": "ECUC-ENUMERATION-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemReportBehavior"ET.SubElement(EcucTextualParamValue_0, "VALUE").text = "REPORT_BEFORE_INIT"EcucNumericalParamValue_1 = ET.SubElement(ParameterValues, "ECUC-NUMERICAL-PARAM-VALUE")ET.SubElement(EcucNumericalParamValue_1, "DEFINITION-REF", {"DEST": "ECUC-BOOLEAN-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemEventAvailable"ET.SubElement(EcucNumericalParamValue_1, "VALUE").text = "true"EcucTextualParamValue_1 = ET.SubElement(ParameterValues, "ECUC-TEXTUAL-PARAM-VALUE")ET.SubElement(EcucTextualParamValue_1, "DEFINITION-REF", {"DEST": "ECUC-ENUMERATION-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemEventKind"ET.SubElement(EcucTextualParamValue_1, "VALUE").text = "DEM_EVENT_KIND_BSW"EcucNumericalParamValue_2 = ET.SubElement(ParameterValues, "ECUC-NUMERICAL-PARAM-VALUE")ET.SubElement(EcucNumericalParamValue_2, "DEFINITION-REF", {"DEST": "ECUC-BOOLEAN-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemFFPrestorageSupported"ET.SubElement(EcucNumericalParamValue_2, "VALUE").text = "false"ReferenceValues = ET.SubElement(EcuContainrValue, "REFERENCE-VALUES")EcucReferenceValue_0 = ET.SubElement(ReferenceValues, "ECUC-REFERENCE-VALUE")ET.SubElement(EcucReferenceValue_0, "DEFINITION-REF", {"DEST": "ECUC-REFERENCE-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDTCRef"ET.SubElement(EcucReferenceValue_0, "VALUE-REF", {"DEST": "ECUC-CONTAINER-VALUE"}).text = "/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet_0/DemDTC_" + DtcCodeHexStr[i]EcucReferenceValue_1 = ET.SubElement(ReferenceValues, "ECUC-REFERENCE-VALUE")ET.SubElement(EcucReferenceValue_1, "DEFINITION-REF", {"DEST": "ECUC-REFERENCE-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemOperationCycleRef"ET.SubElement(EcucReferenceValue_1, "VALUE-REF", {"DEST": "ECUC-CONTAINER-VALUE"}).text = "/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/DemOperationCycle_Other"SubContainers = ET.SubElement(EcuContainrValue, "SUB-CONTAINERS")EcucContainerValu_0 = ET.SubElement(SubContainers, "ECUC-CONTAINER-VALUE")ET.SubElement(EcucContainerValu_0, "SHORT-NAME").text = "DemRbEventClass_0"ET.SubElement(EcucContainerValu_0, "DEFINITION-REF", {"DEST": "ECUC-PARAM-CONF-CONTAINER-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemRbEventClass"ParameterValues_0 = ET.SubElement(EcucContainerValu_0, "PARAMETER-VALUES")EcucNumericalParamValue_3 = ET.SubElement(ParameterValues_0, "ECUC-NUMERICAL-PARAM-VALUE")ET.SubElement(EcucNumericalParamValue_3, "DEFINITION-REF", {"DEST": "ECUC-INTEGER-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemRbEventClass/DemRbEventBufferTime"ET.SubElement(EcucNumericalParamValue_3, "VALUE").text = "0"EcucNumericalParamValue_4 = ET.SubElement(ParameterValues_0, "ECUC-NUMERICAL-PARAM-VALUE")ET.SubElement(EcucNumericalParamValue_4, "DEFINITION-REF", {"DEST": "ECUC-BOOLEAN-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemRbEventClass/DemRbEventRecoverableInSameOperationCycle"ET.SubElement(EcucNumericalParamValue_4, "VALUE").text = "1"EcucNumericalParamValue_5 = ET.SubElement(ParameterValues_0, "ECUC-NUMERICAL-PARAM-VALUE")ET.SubElement(EcucNumericalParamValue_5, "DEFINITION-REF", {"DEST": "ECUC-BOOLEAN-PARAM-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemRbEventClass/DemRbEventStatusBitStorageTestFailed"ET.SubElement(EcucNumericalParamValue_5, "VALUE").text = "0"EcucContainerValu_1 = ET.SubElement(SubContainers, "ECUC-CONTAINER-VALUE")ET.SubElement(EcucContainerValu_1, "SHORT-NAME").text = "DemDebounceAlgorithmClass"ET.SubElement(EcucContainerValu_1, "DEFINITION-REF", {"DEST": "ECUC-CHOICE-CONTAINER-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass"SubContainers_1 = ET.SubElement(EcucContainerValu_1, "SUB-CONTAINERS")EcucContainerValu_2 = ET.SubElement(SubContainers_1, "ECUC-CONTAINER-VALUE")ET.SubElement(EcucContainerValu_2, "SHORT-NAME").text = "DemDebounceCounterBased"ET.SubElement(EcucContainerValu_2, "DEFINITION-REF", {"DEST": "ECUC-PARAM-CONF-CONTAINER-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass/DemDebounceCounterBased"ReferenceValues_0 = ET.SubElement(EcucContainerValu_2, "REFERENCE-VALUES")EcucReferenceValue_2 = ET.SubElement(ReferenceValues_0, "ECUC-REFERENCE-VALUE")ET.SubElement(EcucReferenceValue_2, "DEFINITION-REF", {"DEST": "ECUC-REFERENCE-DEF"}).text = "/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass/DemDebounceCounterBased/DemDebounceCounterBasedClassRef"ET.SubElement(EcucReferenceValue_2, "VALUE-REF", {"DEST": "ECUC-CONTAINER-VALUE"}).text = "/ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet_0/DemDebCntClass_U127_D127"RawText = ET.tostring(CONTAINERS)dom = minidom.parseString(RawText)f = open(r'.\DemEventParameter.axml', 'w', encoding='utf-8')dom.writexml(f, indent='\t', newl='\n', addindent='\t', encoding='utf-8')f.close()
​
def main():OpenExcel()CreatDemDtcXml()CreatDemEventParameterXml()
​
if __name__ == '__main__':main()

导入Python生成的xml文件到Davinci/ISOALR等AUTOSAR工具,即可完成所有DTC的配置。

5.总结

每个人在处理Excel数据的时候,如果发现是重复且有规律的工作,都可以考虑使用Python来提高效率。当然,Python的功能还有很多很多,把基本知识学好,后面遇到什么就学什么,有目的的去学要快很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单选择排序显示第K趟

感悟&#xff1a;一定要小心细节&#xff0c;循环中注意要是否需要重新赋值 #include <stdio.h> int main() { int c 0; int b 0; int n 0; int k 0; int i 0; int j 0; int max 0; int z 0; int i1 0; int temp 0; …

PACS源码,医学影像传输系统源码,全院级应用,支持放射、超声、内窥镜、病理等影像科室,且具备多种图像处理及三维重建功能

​三维智能PACS系统源码&#xff0c;医学影像采集传输系统源码 PACS系统以大型关系型数据库作为数据和图像的存储管理工具&#xff0c;以医疗影像的采集、传输、存储和诊断为核心&#xff0c;集影像采集传输与存储管理、影像诊断查询与报告管理、综合信息管理等综合应用于一体的…

GUAVA 工具类

Guava是一个Google的开源Java库&#xff0c;常用的工具&#xff1a; 集合工具类&#xff0c;包括Lists&#xff08;创建&#xff1a;newArrayList、newLinkedList等&#xff09;、Sets&#xff08;创建&#xff1a;newHashSet、newLinkedHashSet等&#xff09;和Maps&#xff…

破阵子(三分+凸包旋转卡壳)

Description 平面上有n个点&#xff0c;每个点有各自的速度向量&#xff0c;现在给出0时刻&#xff0c;在同一时刻&#xff0c;平面点的最远距离叫做special dis 他们每个点的位置和每个点的速度向量&#xff0c;现在求在哪个时刻的时候&#xff0c;他们的special dis 最小&am…

postgres(pg)数据库使用建表语句创建数据表

一般创建数据表有两种方式&#xff0c;一种是使用建表语句&#xff0c;二是使用图形化工具建表&#xff08;如&#xff1a;pgadmin4、Navicat、DataGrip、dbeaver等等之类的工具&#xff09;&#xff1b; 1、使用建表语句创建数据表&#xff1a; -- 建立学生测试表语句如下&am…

Java问题和解决方案汇总

将其他类型转换成数值类型的解决方案 例&#xff1a;Integer转成Double类型 Double.parseDouble(a.toString()); 嵌套Map中&#xff0c;拿到里层Map的value(例&#xff1a;Map.get("xxx").get("xxx")) 主要的目的是为了得到第二个get&#xff0c;只要将第一…

接口测试:轻松掌握基础知识,快速提升测试技能!

1.client端和server端 开始接口测试之前&#xff0c;首先搞清楚client端与server端是什么&#xff0c;区别。 web前端&#xff0c;顾名思义&#xff0c;指用户可以直观操作和看到的界面&#xff0c;包括web页面的结构&#xff0c;web的外观视觉表现及web层面的交互实…

顶级设计师力荐的界面设计软件,设计新选择

即时设计 作为专业的在线协作UI设计软件&#xff0c;即时设计可以实现视觉效果、交互效果、体验效果一站成型&#xff0c;为你的目标用户创造流畅体验。 轻松绘制原型&#xff1a;借助社区设计资源和原型模板的即时设计&#xff0c;开始敏捷高效的工作。与产品经理分解用户需…

E. Good Triples

首先 如果产生进位的话是一定不对的&#xff0c;因为进位会给一个1&#xff0c;但是损失了10 然后可以按位直接考虑&#xff0c;转换成一个隔板法组合数问题 // Problem: E. Good Triples // Contest: Codeforces - Codeforces Round 913 (Div. 3) // URL: https://codeforces…

xShell快捷键

Xshell 是一个强大的终端仿真器&#xff0c;它支持多种Linux发行版的远程连接。Xshell提供了一系列的快捷键&#xff0c;以提高用户的操作效率。以下是一些Xshell中常用的快捷键&#xff1a; 新建会话窗口&#xff1a; Ctrl N 或 Ctrl Shift N 在现有会话中打开新标签&…

反序列化漏洞详解(二)

目录 pop链前置知识&#xff0c;魔术方法触发规则 pop构造链解释&#xff08;开始烧脑了&#xff09; 字符串逃逸基础 字符减少 字符串逃逸基础 字符增加 实例获取flag 字符串增多逃逸 字符串减少逃逸 延续反序列化漏洞(一)的内容 pop链前置知识&#xff0c;魔术方法触…

python 深度图转换为点云

一、概念 深度图是点云由3D点投影到2D平面的逆过程,其中每个像素值代表的是物体到相机xy平面的距离。深度图可以提供场景中某一点距离摄像机的远近信息。 二、python代码 import numpy as np import open3d as o3d import os# Depth Intrinsic Parameters fx_d = 7.8128789…

软件测试之python+requests接口自动化测试框架实例教程

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

HTTPS安全防窃听、防冒充、防篡改三大机制原理

前言 本文内容主要对以下两篇文章内容整理过滤&#xff0c;用最直观的角度了解到HTTPS的保护机制&#xff0c;当然啦&#xff0c;如果想要深入了解HTTPS&#xff0c;本文是远远不够的&#xff0c;可以针对以下第一个链接中的文章拓展板块进行学习&#xff0c;希望大家通过本文能…

WAT、CP、FT的概念及周边名词解释

CP是把坏的Die挑出来&#xff0c;可以减少封装和测试的成本。可以更直接的知道Wafer 的良率。 FT是把坏的chip挑出来&#xff1b;检验封装的良率。 现在对于一般的wafer工艺&#xff0c;很多公司多把CP给省了&#xff0c;减少成本。 CP对整片Wafer的每个Die来测试&#xff0…

光伏系统方案设计的注意点

随着太阳能技术的日益发展&#xff0c;光伏系统已经成为一种重要的可再生能源解决方案。然而&#xff0c;设计一个高效、可靠的光伏系统需要考虑到许多因素。本文将探讨光伏系统方案设计的注意点&#xff0c;包括系统规模、地理位置、组件选择、系统布局和运维策略。 系统规模 …

C++ 模拟实现string类

目录 一、类的定义 二、初始化&销毁 1、构造函数 2、辨析三种定义 3、析构函数 三、赋值 1、拷贝构造函数 2、赋值运算符 四、成员访问 operator[ ] 五、比较大小&判断相等 六、容量操作 1、size() 2、reserve 3、push_back 4、append 5、加等运算符…

onnx检测推理

起因&#xff1a;当我想把检测的onnx模型转换到特定的设备可以使用的模型时&#xff0c;报错do not support dimension size > 4&#xff0c;onnx中有些数据的维度是五维&#xff0c;如图。本文使用的是edgeyolo&#xff0c;它使用的是yolox的head&#xff0c;最后的输出加上…

gmid方法设计五管OTA二级远放

首先给出第一级是OTA&#xff0c;第二级是CS的二级运放电路图&#xff1a; gmid的设计方法可以根据GBW、Av、CL来进行电路设计&#xff0c;因此在设计电路之前需要以上的参数要求。 1、为了满足电路的相位裕度至少60&#xff0c;需要对GBW、主极点、零点进行分析。 首先给出其…

应用程序无法找到xinput1_3.dll怎么办,xinput1_3.dll 丢失的解决方法

当电脑系统或特定应用程序无法找到或访问到 xinput1_3.dll 文件时&#xff0c;便会导致错误消息的出现&#xff0c;例如“找不到 xinput1_3.dll”、“xinput1_3.dll 丢失”等。这篇文章将大家讨论关于 xinput1_3.dll 文件的内容、xinput1_3.dll丢失问题的解决方法&#xff0c;以…