用dw怎么做网站留言板,有名的公关公司,卢松松博客源码 wordpress博客模板,爱洛阳网目录
前言
正文
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语法…目录
前言
正文
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诊断工作需要实现的DTCDiagnostic 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是读excelxlwt是写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_colx0, end_colxNone) #返回由该行中所有单元格的数据类型组成的列表
table.row_values(rowx, start_colx0, end_colxNone) #返回由该行中所有单元格的数据组成的列表
table.row_len(rowx) #返回该列的有效单元格长度 3)列的操作
ncols table.ncols #获取列表的有效列数
table.col(colx, start_rowx0, end_rowxNone) #返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx0, end_rowxNone) #返回由该列中所有的单元格对象组成的列表
table.col_types(colx, start_rowx0, end_rowxNone) #返回由该列中所有单元格的数据类型组成的列表
table.col_values(colx, start_rowx0, end_rowxNone) #返回由该列中所有单元格的数据组成的列表 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_colx0, end_colxNone)) #返回由该行中所有单元格的数据类型组成的列表print(table.row_values(1, start_colx0, end_colxNone)) #返回由该行中所有单元格的数据组成的列表print(Length of row 2: , table.row_len(1)) #返回该行的有效单元格长度#列操作print(There are %s columns in sheet1 %(table.ncols)) #获取列表的有效列数print(table.col(0, start_rowx0, end_rowxNone)) #返回由该列中所有的单元格对象组成的列表print(table.col_slice(0, start_rowx0, end_rowxNone)) # 返回由该列中所有的单元格对象组成的列表print(table.col_types(0, start_rowx0, end_rowxNone)) # 返回由该列中所有单元格的数据类型组成的列表print(table.col_values(0, start_rowx0, end_rowxNone)) # 返回由该列中所有单元格的数据组成的列表#单元格操作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, encodingus-ascii, xml_declarationNone, default_namespaceNone, methodxml)函数新建一个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 1sina_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 1chinabyte_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, encodingutf-8)dom.writexml(f, indent\t, newl\n, addindent\t, encodingutf-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_rowxFirst_Dtc_RowNum, end_rowxLast_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/DemDTCParameterValues 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/DemDTCSeverityET.SubElement(EcucTextualParamValue, VALUE).text DEM_SEVERITY_NO_SEVERITYEcuNumerivalParamValue ET.SubElement(ParameterValues, ECUC-NUMERICAL-PARAM-VALUE)ET.SubElement(EcuNumerivalParamValue, DEFINITION-REF, {DEST:ECUC-INTEGER-PARAM-DEF}).text /AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTC/DemDtcValueET.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/DemDTCAttributesRefET.SubElement(EcucReferenceValue, VALUE-REF,{DEST:ECUC-CONTAINER-VALUE}).text /ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet_0/DemDTCAttributesRawText ET.tostring(CONTAINERS)dom minidom.parseString(RawText)f open(r.\DemDtc.axml, w, encodingutf-8)dom.writexml(f, indent\t, newl\n, addindent\t, encodingutf-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/DemEventParameterParameterValues 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/DemEventFailureCycleCounterThresholdET.SubElement(EcucNumericalParamValue_0, VALUE).text 1EcucTextualParamValue_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/DemReportBehaviorET.SubElement(EcucTextualParamValue_0, VALUE).text REPORT_BEFORE_INITEcucNumericalParamValue_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/DemEventAvailableET.SubElement(EcucNumericalParamValue_1, VALUE).text trueEcucTextualParamValue_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/DemEventKindET.SubElement(EcucTextualParamValue_1, VALUE).text DEM_EVENT_KIND_BSWEcucNumericalParamValue_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/DemFFPrestorageSupportedET.SubElement(EcucNumericalParamValue_2, VALUE).text falseReferenceValues 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/DemDTCRefET.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/DemOperationCycleRefET.SubElement(EcucReferenceValue_1, VALUE-REF, {DEST: ECUC-CONTAINER-VALUE}).text /ETAS_Project/EcucModuleConfigurationValuess/Dem/DemGeneral/DemOperationCycle_OtherSubContainers ET.SubElement(EcuContainrValue, SUB-CONTAINERS)EcucContainerValu_0 ET.SubElement(SubContainers, ECUC-CONTAINER-VALUE)ET.SubElement(EcucContainerValu_0, SHORT-NAME).text DemRbEventClass_0ET.SubElement(EcucContainerValu_0, DEFINITION-REF, {DEST: ECUC-PARAM-CONF-CONTAINER-DEF}).text /AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemRbEventClassParameterValues_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/DemRbEventBufferTimeET.SubElement(EcucNumericalParamValue_3, VALUE).text 0EcucNumericalParamValue_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/DemRbEventRecoverableInSameOperationCycleET.SubElement(EcucNumericalParamValue_4, VALUE).text 1EcucNumericalParamValue_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/DemRbEventStatusBitStorageTestFailedET.SubElement(EcucNumericalParamValue_5, VALUE).text 0EcucContainerValu_1 ET.SubElement(SubContainers, ECUC-CONTAINER-VALUE)ET.SubElement(EcucContainerValu_1, SHORT-NAME).text DemDebounceAlgorithmClassET.SubElement(EcucContainerValu_1, DEFINITION-REF, {DEST: ECUC-CHOICE-CONTAINER-DEF}).text /AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClassSubContainers_1 ET.SubElement(EcucContainerValu_1, SUB-CONTAINERS)EcucContainerValu_2 ET.SubElement(SubContainers_1, ECUC-CONTAINER-VALUE)ET.SubElement(EcucContainerValu_2, SHORT-NAME).text DemDebounceCounterBasedET.SubElement(EcucContainerValu_2, DEFINITION-REF, {DEST: ECUC-PARAM-CONF-CONTAINER-DEF}).text /AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemEventParameter/DemDebounceAlgorithmClass/DemDebounceCounterBasedReferenceValues_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/DemDebounceCounterBasedClassRefET.SubElement(EcucReferenceValue_2, VALUE-REF, {DEST: ECUC-CONTAINER-VALUE}).text /ETAS_Project/EcucModuleConfigurationValuess/Dem/DemConfigSet_0/DemDebCntClass_U127_D127RawText ET.tostring(CONTAINERS)dom minidom.parseString(RawText)f open(r.\DemEventParameter.axml, w, encodingutf-8)dom.writexml(f, indent\t, newl\n, addindent\t, encodingutf-8)f.close()
def main():OpenExcel()CreatDemDtcXml()CreatDemEventParameterXml()
if __name__ __main__:main() 导入Python生成的xml文件到Davinci/ISOALR等AUTOSAR工具即可完成所有DTC的配置。
5.总结
每个人在处理Excel数据的时候如果发现是重复且有规律的工作都可以考虑使用Python来提高效率。当然Python的功能还有很多很多把基本知识学好后面遇到什么就学什么有目的的去学要快很多。