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…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...