python-自动化办公-Excel-Openpyxl
Python处理Excel数据之Openpyxl
1.1 Openpyxl库的安装使用
openpyxl模块是一个读写Excel 2010文档的 Python 库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与Excel相关的项目基本只支持读或者写Excel一种功能。新建、读取、保存工作簿。Openpyxl的安装和其它库一样。直接在PyCharm 中安装即可。
Openpyxl可以对Excel进入读、写操作,也可以进行单元格格式设置、图表、条件格式、数据透视表等设置。
由于本课程是为了巩固应用python基础知识,所以就只讲解对openpyxl对 Excel的读写操作。
1.2 Excel的新建、读取、保存
1.2.1新建保存工作簿
新建: openpyxl.Workbook(),注意这个的w是大写的(本人吃过亏),可以设置write_only=True/False的读写方式,默认是可写。
保存: workbook.save(‘工作簿名.xlsx’)
1->from openpyxl import Workbook
2-> wb=Workbook()#新建工作簿
3->wb.save('我的工作簿.xlsx')#保存工作簿
每个workbook创建后,默认会存在一个worksheet。也可以自行创建新的worksheet。
1.2.2读取保存工作簿
读取工作簿: openpyxl.load_workbook(‘工作簿名.xlsx’),注意以下相关参数的设置。read_only=False/True False表示可以读、写,True表示只能读、不能写。
guess_types=False/True False表示转换数据,True表示不能转换数据。
data_only=False/True False表示序单元格的真实信息,True表示只读取值。
1-> from openpyxl import load_workbook
2->wb=load_workbook("成绩表-1xsx')#读取工作簿3->wb.save("成绩表-2.xlsx')#保存工作簿
1.2.3实例(批量建新工作表)
1-> from openpyxl import Workbook
2-> for m in range(1,13):
3->wb = Workbook()#新建工作簿4->wb.save('9%d月.xlsx"%m)出保存工作簿
1.3工作表对象的获取方法
1.3.1工作表获取方式
获取当前活动工作表的: workbook.active
以索引值方式获取工作表: workbook.worksheets[索引值]
以工作表名获取:workbook['工作表名],注意,此表达方式没有没有成员提示。循环工作表: workbook.worksheets
获取所有工作表名: workbook.sheetnames
获取指定工作表名: worksheet.tite,可以返回工作表名称,也可以修改工作表名称,如worksheet.title=‘工作表名’
1.3.2实例(批量修改工作表名)
1-> import openpyxl
2-> wb=openpyxLload_workbook('各年业绩表.xlx')
3-> for sh in wb.worksheets:
4-> sh.title=sh.title+'-芝华公司'5-> wb.save('各年业绩表(修改后).xlsxe')
1.4工作表的新建、复制、删除
1.4.1新建工作表
可以在新建的工作簿中新建工作表(在新建工作簿时,会默认新建一个工作表)。也可在已经存在的工作簿中新建工作表。
新建工作表时的默认工作表名: workbook.create_sheet(),默认工作表名为Sheet1、Sheet2、Sheet3…-…-
新建工作表自定义工作表名: workbook.create_sheet(‘"工作表名’,指定位置),如果不指定位置则默认将新建的工作表放置在最后。
1.4.2复制工作表
workbook.copy_worksheet(工作表)
1.4.3 删除工作表
workbook.remove(工作表)
1.5关于工作表的实例应用
1.5.1实例应用(批量新建工作表)
1-> import open pyxl
2-> wb = openpyxl.Workbook()#新建工作簿
3-> for m in range(1,13):
4->wb.create_sheet("%d月"%m)#新建月份工作表
5-> wb.remove(wb['Sheet'])#别除指定工作表
6-> wb.save("2019年计划表.xlsx')#保存工作簿。
1.5.2实例应用(删除不符合条件的工作表)
1-> import openpyxl
2-> wb=openpyxLload_workbook("2018年.xlsx")#读取工作簿
3-> for sh in wb:#活环工作簿中的工作表
4-> if sh.title.split("-")[0]!='北京":#判断工作表是否不等于北京
5->wb.remove(sh)#别除工作表
6->wb.save("北京.xlsx')#保存工作簿
1.5.3实例应用(批量复制工作表)
1-> import openpyxl
2-> wb=openpyxlload_workbook(模板.xlsx')
3-> for m in range(1,13):
4->wb.copy_worksheet(wb['demo'l).title='%d月'%m
5-> wb.remove(wb['demo'])
6->wb.save('2018年各月表格.xlsxe')
1.6单元格信息获取
1.6.1单元格数据获取
A1表示法:工作表[·A1]
,R1C1表示法:工作表.cell(行号,列号)
1.6.2实例应用(汇总各表各单元格数据)
1-> import openpyxl
2->wb = openpyxl.load_workbook(各年业绩表.xlsx')
3->print(sum([s['b14'].value for s in wb]))
4-> print(sum([s.cell(14,2).value for s in wb]))
1.7单元格区域信息获取
1.7.1单元格区域数据获取
1.工作表[起始单元格∵’终止单元格’]或工作表[起始单元格:终止单元格",如l ws[‘A1’:‘F3’]或ws[‘A1: F3’]。此方法是按行读取的数据。
2.工作表["起始行号:'结束行号]或者工作表['起始行号:结束行号],如ws[‘1’:‘3’]或ws['1: 3。此方法是按行读取的数据。
3.工作表[起始列号:"结束列号]或者工作表[起始列号:结束列号],如 ws[‘A’:'F]或ws['A:F]。此方法是按列读取的数据。
4.获取(按行〉指定工作表所有已用数据: list(workbook.worksheets[索引值J.values)
1.7.2实例应用
按行求和(方法1)
1->import open pyxl
2-> wb = openpyxlload_workbook('test.xlsxe')
3-> ws=wb['成绩表"
4-> rng=ws["2:71']
5-> rng=ws['A2:'E71']
6-> print(["%s:%d分1%(rn[O].value,sum([r.value for r in rn][1:])) for rn in rng])
按行求和(方法2)
1-> import openpyxl
2->wb=openpyxl.load_workbook( 'test.xlsx')
3->ws=wb.active
4-> for x in list(ws.values)[1:]:
5->print([x[O],sum(x[1:])
按列统计平均值
1->import openpyxl
2->wb=openpyxl.load_workbook( 'test.xlsx')
3->ws=wb.active
4-> for x in list(zip(*list(ws.values)))[1:]:
5->print([x[ 0],float("%.2f"%(sum(x[1:])/len(x)-1))])
1.8行列信息获取
1.8.1行列信息获取
按行获取工作表使用区域数据:worksheet.rows
按列获取工作表使用区域数据: worksheet.columns
获取工作表中最小行号: worksheet.min_row
获取工作表中最小列号: worksheet.min_column
获取工作表中最大行号: worksheet.max_row
获取工作表中最大列号: worksheet.max_column
获取单元格的行号: cell.row
获取单元格的列号: cell.column
iter方法获取指定区域:
1.按行获取指定工作表单元格区域: worksheet.iter_rows(……)
2.按列获取指定工作表单元格区域: worksheet.iter_cols(……)
可以通过min_row、min_col、max_col、max_row这几个参数进行单元格区域的控制。
1.8.2实例应用
按行求和
1-> import openpyxl
2-> wb=openpyxl.load_workbook('test.xlsx')
3->ws=wb.active
4-> for r in [row for row in ws.rows][1:]:
5-> l=[w.value for v inr]
6->print([I[O],sum(I[1:])])
按列求最大值
1->import openpyxl
2->wb=openpyxlload_workbook('test.xlsx')
3->ws=wb.active
4-> for cin [col for col in ws.columns][1:]:
5-> l=[w.value for v in c]
6->print([I[o],max(I[1:]))
按行求和
1-> import openpyxl
2->wb=openpyxLload_workbook('test.xlsx')
3->ws=wb.active
4->subtotal=[sum([w.value for v in row]) for row in
ws.iter_rows(min_row=2,min_col=2)]
5->name=[v.value for v in ws['a']][1:]
6->print(list(zip(name,subtotal))
按列求最大值
1->import openpyxl
2->wb=openpyxl.load_workbook('test.xlsx')
3->ws=wb.active
4->subtotal=[max([v.value for v in col]) for col in ws.iter_cols(min _row=2,min_col=2)]
5->name=[wvalue for v in ws['1']][1:]
6->print(list(zip(name,subtotal)))
动态获取单元格区域并汇总
1->import openpyxl
2-> wb=openpyxL.load_workbook( 'demo.xlsx')
3->ws=wb.active
4->minr=ws.min_row
5-> minc=ws.min_column
6->maxr=ws.max_row
7->maxc=ws.max_column
8->rngs=ws.iter_rows(min_row=minr+1,min_col=minc+2,max_row=maxr-1,max_col=
maxc-1)
9->subtotal=[min([v.value for v in row]) for row in rngs]
10-> co=[v for v in
ws.iter_cols(min_row=minr+1,min_col=minc+1,max_row=maxr-1,max_col=minc+1)
11-> chanping=[[w.value for v in r] for rin col][o]
12-> print(list(zip(chanping,subtotal)))
1.9单元格的写入
1.9.1单元格与区域数据写入
A1表示法:工作表['A1]=值
,R1c1表示法:工作表.cell(行号,列号,值)
1.9.2实例应用(九九乘法表)
4->import open pyxl
5-> wb=openpyxLload_workbook('demo.xIsx')
6-> ws=wb.active
7-> for x in range(1,10):
8->for y in range(1,x+1):
9->ws.cell(x,y,1%dX%d=%d '9%(y,x,×*y)#方法1
10->ws.cell(x,y).value='%dX%d=%d'%(yxx*y)#方法2
11->wb.save('demo.xlsx')
1.10批量写入数据
1.10.1按行写入数据
在最后一行写入数据:工作表.append(列表)
1.10.2实例应用(九九乘法表)
1-> import openpyxl
2-> wb=openpyxL.load_workbook( 'demo.xlsx")
3->ws=wb.active
4->—[["'%d×%d=%d"%(y,x,x*y) for y in range(1,10) if y<=x] for x in range(1,10)]
5-> for r in l:
6->ws.ap pend(r)
7->wb.save('demo.xlsx')
1.11循环方式批量写入数据
1.11.1循环获取单元格对象,再写入
之前我们可以通过组合单元格来获取或者写入数据,但还有一种方法,就是直接循环单元格区域来写入数据。与循环读取的表示方式基本相同,只是多了一个赋值。
1.11.2实例应用(大于等于90分为优秀)
1-> import openpyxl
2-> wb=openpyxL.load_workbook( 'demo.xlsx")
3-> ws=wb.active
4->rngs=ws.iter_rows(min_row=2,min_col=2)
5-> for row in rngs:
6->for c in row:
7->if c.value>=90:
8->cvalue='%d(%s)%(c.value,'优秀)
9-> wb.save( 'demo1.xlsx')
1.11.3实例应用(每个人的总分大于等于300为优秀)
1. import openpyxl
2.wb=openpyxLl.load_workbook('demo.xlsx')
3. ws=wb.active
4.rngs=ws.iter_rows(min_row=2,min_col=2)
5.for row in rngs:
6.sm=sum( [c.value for cin row][0:4])
7.if sm>=300:
8.row[-1].value='优秀'
9. wb.save('demo2.xlsx')
1.12工作表行、列的插入与删除
1.12.1行列的插入与删除
插入列: worksheet.insert_cols(位置,列数),其中位置是指在工作表的第几列前插入多少列。
插入行: worksheet.insert_rows(位置,行数),其中位置是指在工作表的第几行前插入多少行。
删除列: worksheet.delete_cols(位置,列数),从指定位置开始向后删除指定的列数。
删除行: worksheet.delete_rows(位置,行数),从指定位置开始向下删除指定的行数。
1.12.2实例应用(筛选小于300的记录)
12-> import openpyxl
13-> wb=openpyxLload_workbook("成绩表.xlsx")
14-> ws=wb.active
15-> for r in range(ws.max_row,1,-1):
16->s=sum([vvalue for v in ws[r][1:]])
17->if s>=300:
18->ws.delete_rows(r)
19-> wb.save('demo999.xlsx")
1.13实例应用(求和结果写入单元格)
1->import openpyxl
2-> wb=openpyxl.load_workbook('test.xlsx')
3->ws=wb['成绩表']
4->rng=ws[str(ws.min_row +1):str(ws.max_row)]#动态获取单元格区域
5->rngs=[[rn[0].value,sum([r.value for r in rn][1:])] for rn in rng]#汇总处理
6->ws1=wb.create_sheet("结果")#新建工作表
7->ws1.append([姓名,总分数]#写入表头
8->for line in rngs:
9->ws1.append(lin e)#活环写入求和分数
10-> wb.save('test1.xlsx")#保存工作簿
1.14实例应用(筛选成绩总分大于等于300分的记录)
1->import openpyxl
2->wb=openpyxlload_workbook('test.xlsxe')
3->ws=wb[成绩表];nws=wb.create_sheet("结果)
4->rng=list(ws.rows)[1:];nws.append([wvalue for v in ws[1':1']]+[总分'])
5-> for l in rng:
6-> l=[w.value for v in l]
7->if sum(Il[1:])>=300:
8->nws.append(ll+[sum(lI[1:]])
9-> wb.save('test2.xlsxe')
1.15实例应用(工资条制作)
1->import openpyxl
2-> wb=openpyxLload_workbook('工资表.xlsx",data_only=True)
3->ws=wb.active
4-> for r in range(ws.max_row,2,-1):
5->ws.insert_rows(r)
6->for c in range(1,8):
7->ws.cellr,c,ws.celI(1,c).value)
8-> wb.save('工资表结果.xkx')
1.16 实例应用(多工作表合并到单工作表)
1-> import openpyxl
2-> wb=openpyxl.load_workbook('各年业绩表.xlsx')#读取工作簿
3-> nwb=openpyxLWorkbook()#新建工作簿
4->nws=nwb.active#获取活动工作表
5->nws.append(['年份∵月份∵金额])#写入标题
6-> for sh in wb:
7->ll=[[sh.title] +[wvalue for v inl] for l in sh.rows][1:-1]#合并各表数据
8->for l in ll:
9->nws.append(ID)#3入到新表
10-> nwb.save('合并.xlsx')#保存工作表
1.17实例应用(单工作表拆分到多工作表)
1->import openpyxl
2-> wb=openpyxLload_workbook('各班成绩表.xkx')#读取工作簿
3->ws=wb.active#读取活动工作表
4->rngs=ws.iter_rows(min_row=2)#获取工作表中的数据
5->d=#创建空字典
6-> for r in rngs:
7-> l=[wvalue for v inr]
8->if I[0] in d.keys():#!将每行数据写入到字典中对应的班级
9.>d[1[0]]+=[]
10->else:
11->d[[0]]=[叮]
12-> nwb=openpyxL. Workbook()#新建工作簿
13-> for k,v in sorted(d.items()):
14->nws=nwb.create_sheet(k)#将字典中的键名做为班级名
15-> nws.append(['班级∵姓名∵'分数]#写入每个工作表的标题
16->forr in v:
17->nws.append(r)#将每个班的记录写入对应的工作表
18-> nwb.remove(nwb['Sheet'])#别除默认创建的工作表
19-> nwb.save("拆分到工作表.xlsxe')#保存工作簿
1.18实例应用(单工作簿拆分到多工作簿中(单表中))
1->import openpyxl
2-> wb=openpyxL.load_workbook('工资表.xlsx",data_only=True)3->rngs=wb.active.iter_rows(min_row=2)
4-> d=[]
5-> for row in rngs:
6->l=[w.value for v in row]
7->if I[2] in d.keys():
8->d[[2]]+=[l]
9->else:
10->d.update(l[2]:[0]
11-> for k,v in d.items():
12->nwb=open pyxl.Workbook()
13-> nws=nwb.active;nws.title=k
14->nws.append(['工号∵姓名,'应发工资"∵扣款∵奖金"∵;实发工资D)
15->for r in v:
16->del r[2]
17->nws.append(r)
18->nwb.save('各部门工资表W'+k+'.xlsx')
1.19实例应用(单工作簿拆分到多工作簿中(多表中))
1->import openpyxl
2->wb=openpyxl.load_workbook('工资表.xlsx",;data_only=True)
3->ws=wb.active
4->rngs=ws.iter_rows(min_row=2)
5->d=[]
6->for row in rngs:
7->l=[Lvalue for l in row]
8->if [2] in d.keys() and l[3] in d[II[2]].keys(:
9->d[I[2][[3]+=[
10->else:
11->if not lI[2] in d.keys():d[II[2]]=得
12->d[I[2]][[3]=[I
13-> for k,v in d.items():
14->nwb=open pyxl.Workbook()
15->for m,n in witems():
16->nws=nwb.create_sheet(m);nws.append([wvalue for v in ws['1'l1)
17->for f in n:
18->nws.append(f)
19->nwb.remove(nwb['Sheet'])
20->nwb.save('拆分结果W'+k+".xlsx')
1.20实例应用(二维表转一维表)
1->import openpyxl
2->wb=openpyxl.load_workbook("业绩表.xlsx")
3->ws=wb.active
4->if 转换表' in wb.sheetnames:
5->wb.remove(wb[转换表])
6->nws=wb.create_sheet('转换表')
7->nws.append([姓名∵;月份∵金额])
8-> for name,row in zip(ws['a'][1:],ws.iter_rows(min_col=2,min_row=2)):
9->for x,y in zip(ws[11'][1:],row):
10->nws.append([name.value,x.value,y.value])11-> wb.save("业绩表.xlsxe')
1.21实例应用(一维转二维)
1-> import openpyxl
2->wb=openpyxL.load_workbook("业绩表.xlsx")
3->ws=wb.active
4-> if not'二维表' in wb.sheetnames:
5->nws=wb.create_sheet('二维表')
6->rngs=[[r.value for r in row] for row in ws.iter_rows(min_row=2)]
7->mm=list({name.value:" for name in ws['b'][1:]}.keys0)
8->nws.ap pend(["姓名']+mm)
9->forx in {name.value:" for name in ws['a'][1:]}.keys():
10->=[(x,y) for yin mm]
11->nws.append([x]+[list(filter(lambda x:x[0]==s[0] and x[1]==s[1],rngs)[O][2]
for s in l])
12-> wb.save("业绩表.xlsx")
1.22实例应用(将入库单据数据写入工作表)
1-> import openpyxl
2-> wb=openpyxL.load_workbook('入库单.xlsx',data_only=True)
3->wb1=openpyxLload_workbook("数据库.xlsx')
4->ws=wb.active
5-> Hlist(ws.values)
6-> t=(I[2][1],I[2][3].I[2][5])
7->if not t[2] in [v.value for v in wb1.active[i]]:
8->for v in [5:]:
9->if not None in v:
10->wb1.worksheets[o].append(v+t)
11->wb1.save("数据库xlsx'")
12->print(保存成功!)
13-> else:
14->print('己保存)
相关文章:
python-自动化办公-Excel-Openpyxl
Python处理Excel数据之Openpyxl 1.1 Openpyxl库的安装使用 openpyxl模块是一个读写Excel 2010文档的 Python 库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其…...

图形编辑器基于Paper.js教程10:导入导出svg,导入导出json数据
深入了解Paper.js:实现SVG和JSON的导入导出功能 Paper.js是一款强大的矢量绘图JavaScript库,非常适合用于复杂的图形处理和交互式网页应用。本文将详细介绍如何在Paper.js项目中实现SVG和JSON格式的导入导出功能,这对于开发动态图形编辑器等…...

[STM32][Bootloader][教程]STM32 HAL库 Bootloader开发和测试教程
0. 项目移植 对于不想知道其执行过程的朋友来说,可以直接移植,我的板子是STM32F411CER6, 512K M4内核 项目地址: Bootloader(可以自己写标志位用于自测,项目中这部分代码已经被注释,可以打开自行测试&…...

如何手写一个SpringBoot框架
你好,我是柳岸花开。 在这篇文章中,我们将手写模拟SpringBoot的核心流程,让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程,包含两个模块: springboot模块,表示Spring…...
vite解决前端跨域步骤
Vite 解决跨域问题的原理主要是通过其内置的开发服务器功能实现的,具体来说,是通过 HTTP 代理(HTTP Proxy)机制。在开发环境中,Vite 服务器可以配置为一个代理服务器,将前端应用发出的请求转发到实际的后端…...

同步交互与异步交互:深入解析与选择
同步交互与异步交互:深入解析与选择 1、同步交互2、异步交互3、选择策略 💖The Begin💖点点关注,收藏不迷路💖 在软件开发的世界里,交互方式主要分为两大类:同步与异步。下面是对这两种方式的解…...

Day1
首先,大概学习了一下用anaconda去创建一个环境(因为Django是有python版本的要求),然后学着去切换环境。 创建环境:conda create -n django_study python3.10 激活环境:conda activate django_study 删除环…...

Introduction to Data Analysis with PySpark
1.DataFrame and RDDs 2.Spark Architecture 3. Data Formats and Data Sources 倘若您觉得我写的好,那么请您动动你的小手粉一下我,你的小小鼓励会带来更大的动力。Thanks....

基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 无刷直流电机(BLDCM)原理 4.2 六步换相逆变器 4.3 双PI控制器设计 5.完整工程文件 1.课题概述 基于双PI控制器结构的六步逆变器供电无刷直流电机调速simulink仿真。双PI控制…...
双向链表的基本操作
#include<iostream> #include<cmath> #include<cstring> using namespace std; typedef long long ll; typedef struct line {int data;struct line *pre;//前指针struct line *next;//后指针 }line,*a; line* init_line(line*head) {cout<<"请输…...
modbus tcp和modbusRTU的区别是什么?
Modbus是一种应用广泛的通信协议,主要用于工业自动化和过程控制系统。Modbus有多种变体,其中Modbus TCP和Modbus RTU是最常见的两种。以下是它们之间的主要区别: 1. 基本定义 Modbus RTU (Remote Terminal Unit): 是基于串行通信的协议&am…...
web小游戏开发:拼图(四)对调和移动拼图玩法的实现
web小游戏开发:拼图(四)对调和移动拼图玩法的实现 对调方式对调模式实现移动方式移动的实现小结对调方式 在完成了原始拼图玩法后,剩下两个玩法其实相对就变得简单的多了。 对调模式,简单来说,就是选中两个图块,然后位置对调一下。 那么,我们来整理一下,看看需要哪…...

前端:Vue学习 - 智慧商城项目
前端:Vue学习 - 智慧商城项目 1. vue组件库 > vant-ui2. postcss插件 > vw 适配3. 路由配置4. 登录页面静态布局4.1 封装axios实例访问验证码接口4.2 vant 组件 > 轻提示4.3 短信验证倒计时4.4 登录功能4.5 响应拦截器 > 统一处理错误4.6 登录权证信息存…...
KVM调整虚拟机与CPU铆钉(绑定)关系
虚拟机铆钉CPU 把虚拟机的vCPU绑定在物理CPU上,即VCPU只在绑定的物理CPU上调度,在特定场景下达到提升虚拟机性能的目的。比如在NUMAQ系统中,把vCPU绑定在同一个NUMA节点上,可以避免CPU跨节点访问内存,避免影响虚拟机运…...

华火电焰灶:烹饪新宠,温暖与美味的完美融合
在众多厨房电器中,华火电焰灶以其独特的魅力和卓越的性能脱颖而出,成为了众多家庭的烹饪新宠。今天,就让我们一同走进华火电焰灶的精彩世界,探索它的非凡之处。 华火电焰灶,首先吸引人的便是其创新的等离子电生明火技术…...

理想发周榜,不是新能源市场的原罪
余华在他的小说《在细雨中呼喊》曾写过这么一段话: “仓廪实而知礼节,衣食足而知荣辱”,在物质需求得到满足以前,精神文明的发展难免会有所滞后。所以,贫穷,不是原罪。 同样的,在如今的新能源…...

AHK是让任何软件都支持 Shift + 鼠标滚轮 实现界面水平滚动
目录 基本介绍 详细特点 图解安装 下载失败?缓慢? 创建并运行脚本代码😃 新建空 xxx.ahk文件 vscode/记事本等编辑工具打开 复制并粘贴简易脚本 运行 其他问题 问题一:弹出无法执行此脚本 关闭脚本 基本介绍 AutoHot…...
如何在C语言中实现求解超级丑数
超级丑数是一个正整数,并且它的质因数只包含在给定的质数列表中。超级丑数的定义类似于丑数,但可以根据特定需求改变质因数的范围。下面是如何在C语言中实现求解超级丑数的代码。 我们使用最小堆(优先队列)来高效地生成超级丑数序…...

secExample靶场之java反序列化漏洞复现
我是使用kali虚拟机搭建的靶场,具体搭建步骤可以看我之前的博客内容。 访问靶机地址,打开java反序列化的 点进去后是如图的页面,随便输入一信息。 可以看到敏感信息直接显示在了页面上。 访问192.168.189.141:8080/cors1,可以看到…...

解决升级Linux内核后,open files设置无效的问题。
问题过程 操作系统是OpenEuler 20.03,内核由4.19.90-2112.8.0.0131.oe1.aarch64升级到kernel-4.19.90-2401.1.0.0233.oe1.aarch64后,重启系统后,重新开起来运行OceanBase就运行不起来了,提示open files must not be less than 20…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...