【Python】Python给工作减负-读Excel文件生成xml文件

news2025/4/17 3:10:34

目录

​前言

正文

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的配置项基本类似。也就是说需要在ISOLAR工具上重复手动配置500个DTC。ISOLAR工具还非常的卡。

分析整个操作过程为: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():
    # 设置一个新节点,并设置其标签为root
    root = ET.Element("root")
    # 在root下新建两个子节点,设置其名称分别为sina和chinabyte
    sina = ET.SubElement(root, "sina")
    chinabyte = ET.SubElement(root, "chinabyte")
    # 在sina下新建两个子节点,设置其节点名称分别为number和first
    sina_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和first
    chinabyte_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 DtcCodeHexStr
    global DtcCodeDemStr
    
    data = 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_RowNum
    global Last_Dtc_RowNum
    global DtcCodeHexStr
    global DtcCodeDemStr
    
    CONTAINERS = 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_RowNum
    global Last_Dtc_RowNum
    global DtcCodeHexStr
    global DtcCodeDemStr
    
    CONTAINERS = 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()

5.总结

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

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

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

相关文章

前端面试灵魂提问(1)

1.自我介绍 2.在实习中,你负责那一模块 3.any与unknow的异同 相同点:any和unkonwn 可以接受任何值 不同点:any会丢掉类型限制,可以用any 类型的变量随意做任何事情。unknown 变量会强制执行类型检查,所以在使用一个…

msvcp140_codecvt_ids.dll丢失解决方案,验证有效

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140_codecvt_ids.dll丢失”。这些动态链接库文件是程序运行所必需的,它们包含了许多函数和资源。丢失或者损坏通常会导致某些应用程序无法正常运行。 首先,我们…

同旺科技 USB TO SPI / I2C --- 调试W5500

所需设备: 内附链接 1、USB转SPI_I2C适配器(专业版); 首先,连接W5500模块与同旺科技USB TO SPI / I2C适配器,如下图: 读取重试时间值寄存器,默认值0x07D0 输出结果与默认值一致,芯片基本功能已经调通&am…

DDD系列 - 第5讲 从架构师的角度看待DDD - 一个关于拆解、微服务、面向对象的故事(三)

目录 给这个故事起个新的名字 - DDD补充给这个故事起个新的名字 - DDD 到此这个故事可以暂时告一段落了,整个过程我们采用了拆解、微服务架构、面向对象的设计思想,并不断进行优化与思考,最终整个建模过程及架构方案归纳如下图: 接下来我们给这个故事换个名字:DDD(Domai…

关于安科瑞AAFD-40型故障电弧探测器的功能介绍-安科瑞 蒋静

1 概述 故障电弧探测器(以下简称探测器)对接入线路中的故障电弧(包括故障并联电弧、故障串联电弧)进行有效的检测,当检测到线路中存在引起火灾的故障电弧时,可以进行现场的声光报警,并将报警信…

Python标准库:time库【侯小啾python领航班系列(十八)】

Python标准库:time库【侯小啾python领航班系列(十八)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

【经验分享】DDNS配置--使用DDNS-GO

DDNS配置 DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序&…

Ubuntu系统CLion安装与Ubuntu下菜单启动图标设置

Ubuntu系统CLion安装 pycharm 同理。 参考官网安装过程:官网安装过程 下载linux tar.gz包 # 解压 sudo tar -xzvf CLion-*.tar.gz -C /opt/ sh /opt/clion-*/bin/clion.sh其中第二个命令是启动CLion命令 clion安装完以后,不会在桌面或者菜单栏建立图…

【蓝桥杯软件赛 零基础备赛20周】第5周——高精度大数运算与队列

文章目录 1. 数组的应用–高精度大数运算1.1 Java和Python计算大数1.2 C/C高精度计算大数1.2.1 高精度加法1.2.2 高精度减法 2. 队列2.1 手写队列2.1.1 C/C手写队列2.1.2 Java手写队列2.1.3 Python手写队列 2.2 C STL队列queue2.3 Java队列Queue2.4 Python队列Queue和deque2.5 …

Linux:锁定部分重要文件,防止误操作

一、情景描述 比如root用户或者拥有root权限的用户,登陆系统后,通过useradd指令,新增一个用户。 而我们业务限制,只能某一个人才有权限新增用户。 那么,这个时候,我们就用chattr来锁定/etc/passwd文件&…

【方案】智慧林业:如何基于EasyCVR视频能力搭建智能林业监控系统

随着人类进程的发展。城市化范围的扩大,森林覆盖率越来越低,为保障地球环境,保护人类生存的净土,森林的保护与监管迫在眉睫。TSINGSEE青犀智慧林业智能视频监控系统方案的设计,旨在利用现代科技手段提高林业管理的效率…

Elasticsearch 如何处理 Aggs 顺序中的大写字母和小写字母?

Elasticsearch 排序允许你根据特定条件对搜索结果进行排序。 然而,在排序时处理区分大小写时,Elasticsearch 将大写和小写字母视为不同的字符,分别对它们进行排序。 这是因为 ASCII 表顺序是从大写 A 到小写 z。 默认情况下,Elas…

定时任务特辑 | Quartz、xxl-job、elastic-job、Cron四个定时任务框架对比,和Spring Boot集成实战

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

每个点取值拆成多个点的最小割问题:CF1430G

https://vj.imken.moe/contest/597216#problem/I 题目等价于求 min ⁡ ∑ u a u ( o u t u − i n u ) \min \sum_{u}a_u(out_u-in_u) min∑u​au​(outu​−inu​) 发现每个数的取值范围最多到 n n n,然后又有一堆限制,考虑拆点网络流。 每个点拆成…

zookeeper集群+kaafka集群

kafka3.0之前依赖于zookeeper zookeeper开源,分布式的架构,提供协调服务(Apache项目) 基于观察者模式涉及的分布式服务管理架构 存储和管理数据,分布式节点上的服务接受观察者的注册,一旦分布式节点上的…

保护您的数据库免受注入攻击:MSSQL注入入门指南

MSSQL注入的入门讲解 一、引言二、MSSQL注入的基础知识2.1、MSSQL数据库的基本原理和结构2.2、常见的SQL语句和操作2.3、MSSQL注入的原理和工作方式 三、MSSQL注入攻击技术3.1、基于错误的注入攻击:利用错误消息和异常信息3.2、基于时间的注入攻击:利用延…

二、设置三台虚拟机的内存、MAC地址、IP地址

目录 1、配置内存 2、配置MAC地址 2.1 配置node2的MAC地址

HNU-计算机网络-讨论课2

第二次 有关网络智能、安全以及未来网络的讨论 一、必选问题(每组自由选择N个,保证组内每人负责1个) 网络的发展促进信息的传播,极大提高了人类的感知能力,整个世界都被纳入人类的感知范围。但人们对信息系统以及数据…

【动态规划】LeetCode-LCR166.珠宝的最高价值

🎈算法那些事专栏说明:这是一个记录刷题日常的专栏,每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目,在这立下Flag🚩 🏠个人主页:Jammingpro 📕专栏链接&…

DCCK“启航计划“3+2第三课相机参数于选型

面积小,通电发热都用以引入噪声