python使用openpyxl处理excel
文章目录
一、写在前面
1、安装openpyxl
pip install openpyxl
2、认识excel窗口
明确下行(row),列(column),单元格(cell),坐标(coordinate)与表(sheet)的概念。
这里还要注意一点,在Excel中是从1开始计数的,并不是像程序编码中0开始,这点很重要。比如图中 【后羿】标出来的格子对应的单元格是B4,B4就是它的坐标。
二、基本使用
1、打开excel
from openpyxl import load_workbookfilePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开已经存在的excel文件
print(workbook.sheetnames) # 打印excel中的表格(sheet)名
# 结果:['花名册', '成绩单']
2、获取sheet表格
'''
一般而言我们操作的都是第一个表,而获取表的方法也多种,常用的有三种:
workbook[表格名] :通过传入相应的表格名来获取对应的表数据;
workbook.worksheets[索引] :通过索引从workbook.worksheets中获取对应的表数据;
workbook.active :获取当前活动的工作表
'''
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
print(workbook.sheetnames) # 打印excel中的表格(sheet)名
sheet = workbook["花名册"] # 根据表名获取表格
sheet2 = workbook.worksheets[0] #根据索引在worksheets中获取表格
sheet3 = workbook.active # 获取当前活跃的表
print(sheet)
print(sheet2)
print(sheet3)
'''
运行结果:
['花名册', '成绩单']
<Worksheet "花名册">
<Worksheet "花名册">
<Worksheet "成绩单">
'''
3、获取sheet表格 尺寸
'''
获取一个表格的尺寸
'''
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
print(workbook.sheetnames) # 打印excel中的表格(sheet)名
sheet = workbook["花名册"] # 根据表名获取表格
sheet2 = workbook.worksheets[1] #根据索引在worksheets中获取表格
print(sheet, sheet.dimensions)
print(sheet2, sheet2.dimensions)
'''
运行结果:
['花名册', '成绩单']
<Worksheet "花名册"> A1:C5
<Worksheet "成绩单"> A1:D5
'''
4、获取单元格数据
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格
sheet2 = workbook.worksheets[1] #根据索引在worksheets中获取表格
print(sheet["B2"]) #获取sheet的B2单元格的对象
print(sheet2["C4"]) #获取sheet2的C4单元的对象
print(sheet["B2"].value) #获取sheet的B2单元格中的值
print(sheet2["C4"].value) #获取sheet2的C4单元格中的值
'''
结果:
<Cell '花名册'.B2>
<Cell '成绩单'.C4>
李白
96
'''
单元格数据除了坐标的方式来定位,我们还可以用行列来找到它,比如B2对应的是第2行第2列(row=2,column=2), C4对应的是第4行第3列(row=4, column=3)。
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格
sheet2 = workbook.worksheets[1] #根据索引在worksheets中获取表格
cell = sheet.cell(row=2, column=2) #获取B2的数据
cell2 = sheet2.cell(row=4, column=3) #获取C4的数据
print(cell, cell.value) #获取B2单元格中的值
print(cell2, cell2.value) #获取C4单元格中的值
5、获取区域单元格数据
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格
cells = sheet["A1:C4"] #获取A1:C4区域的数据
for i in cells:print(i)for j in i:print(j.value)'''
结果:
(<Cell '花名册'.A1>, <Cell '花名册'.B1>, <Cell '花名册'.C1>)
学号
姓名
性别
(<Cell '花名册'.A2>, <Cell '花名册'.B2>, <Cell '花名册'.C2>)
1
李白
男
(<Cell '花名册'.A3>, <Cell '花名册'.B3>, <Cell '花名册'.C3>)
2
甄姬
女
(<Cell '花名册'.A4>, <Cell '花名册'.B4>, <Cell '花名册'.C4>)
3
后羿
男
'''
从打印的结果可以看出,cells中的数据是按行读取的。
通过sheet[“坐标:坐标2”]获取区域内单元格的数据,它返回的是一个区域内的数据。其实我们还可以通过sheet[]方法获取某行或某列的数据,格式如下:
获取第A列的数据:sheet[“A”]
获取第4行的数据:sheet[“4”]
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格
print("第4行的数据:")cells = sheet["4"] #获取第4行的数据
for i in cells:print(i.value)print("第A列的数据:")
cells = sheet["A"] #获取A列的数据
for i in cells:print(i.value)print("2-4行之间的数据:")
cells = sheet[2:4] #获取第2行到第4行之间的数据
for i in cells:print(i)for j in i:print(j.value)print("A-C列之间的数据:")
cells = sheet["A:C"] #获取第A列到第C列之间的数据
for i in cells:print(i)for j in i:print(j.value)
sheet[]获取单行单列的数据没有问题,如果获取多行或是多列呢?答案仍是通过sheet[]函数,格式如:
获取行1到行2之间的数据:sheet[“行1:行2”]
获取列1与列2之间的数据:sheet[“列1:列2”]
注意行是由数字表示,列是由A-Z的字母组合表示。
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格print("2-4行之间的数据:")
cells = sheet[2:4] #获取第2行到第4行之间的数据
for i in cells:print(i)for j in i:print(j.value)print("A-C列之间的数据:")
cells = sheet["A:C"] #获取第A列到第C列之间的数据
for i in cells:print(i)for j in i:print(j.value)
6、sheet.iter_rows()方法
前面我们学习了用sheet[]方法获取单元格区域内数据,sheet[]很强大,既能获取单行或单列数据,又能获取多行或多列之间的数据,还能根据单元格坐标获取两个坐标内单元格的数据。
但是sheet[]方法有一定的局限性,比如我需要第10行至第15行,第3列至第10列之间的全部单元格数据,我需要先把行列信息转化为字母数字坐标,那有没有一种方法直接就根据行列数据就能获取相应范围内的数据呢,答案当然是有的,那就是sheet.iter_rows()。我们看下它的定义:
'''
min_row为最小行数索引
max_row为最大行数索引
min_col为最小列数索引
max_col为最大列数索引
'''
def iter_rows(self, min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)
这里我们可以通过min_row,max_row,min_col,max_col来控制需要获取的行或列的索引,这四个值都是可以缺省的,如果全部缺省就是按行返回表的所有数据。这里需要注意索引最小值都是从1开始的。
values_only 默认是Flase, 如果设置为True则直接输出值,不必利用单元格的value属性来输出值了。
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格# 按行获取范围内数据
for i in sheet.iter_rows(min_row=2, max_row=4, min_col=1, max_col=2):print(i)for j in i:print(j.value)# 按行获取所有数据
for i in sheet.iter_rows():print(i)for j in i:print(j.value)
当缺省min_row时是默认取的最小行;
当缺省max_row时是默认取的最大行;
当缺省min_col时是默认取的最小列;
当缺省max_col时是默认取的最大列;
7、修改单元格的值
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook['花名册'] # 根据表名获取表格sheet["B2"] = '有霸夫' # 修改B2单元格的值为'有霸夫'
cell = sheet["B3"] # 获取B3单元格为cell
cell.value = '蔡文姬' # 修改cell的内容为 '蔡文姬'savePath = r'D:\王者小学2.xlsx'
workbook.save(savePath) # 另存为D:\王者小学2.xlsx
8、向表格中插入行数据
append()
会在表格已有的数据后面增添你要加入的数据,注意它是按行插入
的。
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) # 打开excel文件
sheet = workbook['花名册'] # 根据表名获取表格
data = [['5', '安琪拉', "女"],['6', '荆轲', "女"],['7', '夏侯惇', "男"],
]
for row in data:
sheet.append(row) #按行插入到表格数据最后面
workbook.save(filePath) # 保存到源文件
9、实战:合并多个excel
import time
from openpyxl import Workbook, load_workbook
import os
def 合并表格(file_dir, save_dir):files_name = os.listdir(file_dir)# 创建新表格new_wb = Workbook()new_ws = new_wb.activeheader = ['销售日期', '员工工号', '销售员', '货号', '销售单号', '销量', '销售额']new_ws.append(header)# 向新的表格写入数据for file_name in files_name:wb = load_workbook(file_dir + "\\" + file_name)for sheet in wb.sheetnames:ws = wb[sheet]# 设置values_only=True 则可以直接得到单元格中的值for row in ws.iter_rows(min_row=2, values_only=True):new_ws.append(row)print('全年销售数据为 %s 行' % (new_ws.max_row - 1)) # 去除第一行标题剩下的则为全年销售数据总行数# 数据保存if not os.path.exists(save_dir):os.makedirs(save_dir)new_wb.save(save_dir + "\\" + "全年数据.xlsx")if __name__ == '__main__':开始时间 = time.time()合并表格(r"D:\2024年销售明细", r"D:\2024年销售分析")print('合并完成耗时:', time.time() - 开始时间, "秒")
三、获取Excel数据扩展
1、获取单元格其他属性
'''
获取属性的方法其实跟获取值的方法是一样的,
cell.row:获取行数
cell.column:获取列数
cell.coordinate:获取坐标
'''
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格
sheet2 = workbook.worksheets[1] #根据索引在worksheets中获取表格
cell = sheet["B2"] #获取B2的数据
cell2 = sheet2["C4"] #获取C4的数据
print("单元格B2 行数:%s 列数:%s 值:%s 坐标:%s" % (cell.row, cell.column,
cell.value, cell.coordinate)) #获取B2单元格属性
print("单元格C4 行数:%s 列数:%s 值:%s 坐标:%s" % (cell2.row, cell2.column,
cell2.value, cell2.coordinate)) #获取C4单元格属性
'''
结果:
单元格B2 行数:2 列数:2 值:李白 坐标:B2
单元格C4 行数:4 列数:3 值:96 坐标:C4
'''
2、sheet.iter_cols()方法
sheet.iter_cols的使用可以说几乎跟sheet.iter_rows()是一样的:
- 当不传入参数时是按列获取表中的所有数据;
- 当设置参数时则返回参数限定范围内的表数据;
- 当设置的参数有缺省时,如果缺省的参数是min_row或min_col则取最小行或是最小列,如果是max_row或是max_col则取最大行或最大列。
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格
print("不指定min_row:")# 按行获取值,缺省min_row
for i in sheet.iter_cols(max_row=4, min_col=1, max_col=2):print(i)for j in i:print(j.value)print("不指定max_row:")
# 按行获取值,缺省max_row
for i in sheet.iter_cols(min_row=2, min_col=1, max_col=2):print(i)for j in i:print(j.value)print("不指定min_col:")
# 按行获取值,缺省min_row
for i in sheet.iter_cols(min_row=2, max_row=4, max_col=2):print(i)for j in i:print(j.value)print("不指定max_col:")
# 按行获取值,缺省max_row
for i in sheet.iter_cols(min_row=2, max_row=4, min_col=1):print(i)for j in i:print(j.value)
3、sheet.rows和sheet.columns
sheet.rows 获取表格中所有行数据;
sheet.columns获取表格中所有列数据。
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook["花名册"] # 根据表名获取表格print("sheet.rows获取所有行数据:")
# 按行获取值
for i in sheet.rows:print(i)for j in i:print(j.value)print("sheet.columns获取所有列数据:")
# 按列获取值
for i in sheet.columns:print(i)for j in i:print(j.value)
4、插入空行和空列
插入空行和空列的格式如下:
sheet.insert_rows(idx=数字编号, amount=要插入的行数)
,插入的行数是在idx行数的位置插入,如果amount不设置则默认插入一行;
sheet.insert_cols(idx=数字编号, amount=要插入的列数)
,插入的位置是在idx列数的位置插入,如果amount不设置则默认插入一列。
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook['花名册'] # 根据表名获取表格sheet.insert_rows(idx=3, amount=2) #第三行位置插入两行
sheet.insert_cols(idx=2, amount=1) #第二列位置插入一列savePath = r'D:\王者小学2.xlsx'
workbook.save(savePath) # 另存为D:\王者小学2.xlsx
5、删除行和列
删除行和列的格式如下:
sheet.delete_rows(idx=数字编号, amount=要删除的行数)
,删除的行数是在idx行数的位置
sheet.delete_cols(idx=数字编号, amount=要删除的列数)
,删除的列数是在idx行数的位置
from openpyxl import load_workbook
filePath = r'D:\王者小学2.xlsx' # 文件路径
workbook = load_workbook(filePath) #打开excel文件
sheet = workbook['花名册'] # 根据表名获取表格sheet.delete_rows(idx=3, amount=2)
sheet.delete_cols(idx=2, amount=1)savePath = r'D:\王者小学2.xlsx'
workbook.save(savePath) # 另存为D:\王者小学2.xlsx
6、创建新的sheet表
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) # 打开excel文件workbook.create_sheet("身高") # 创建新的身高表print(workbook.sheetnames)
sheet = workbook.worksheets[2]
data = [['学号', '身高'],['1', '168'],['2', '181'],['3', '160'],['4', '160'],['5', '160'],['6', '170'],['7', '190'],
]
for row in data:sheet.append(row)workbook.save(filePath) # 保存源文件
7、删除sheet表
del workbook[‘表名’]:根据表名删除
workbook.remove(sheet表):删除某个sheet表对象;
from openpyxl import load_workbook
filePath = r'D:\王者小学.xlsx' # 文件路径
workbook = load_workbook(filePath) # 打开excel文件
print(workbook.sheetnames)
# 方法一
del workbook['身高']
# 方法二
# sheet = workbook['身高']
# workbook.remove(sheet) #删除身高表
print(workbook.sheetnames)
workbook.save(filePath) # 保存为源文件
8、新建Excel与修改sheet表名
from openpyxl import Workbook
workbook = Workbook()
# 保存
workbook.save(filename=r"D:\新建Excel.xlsx")
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active
sheet.title = "我是表格" #设置表格的标题为我是表格
workbook.save(filename=r"D:\新建Excel.xlsx")
9、设置表格样式与单元格属性
'''
我们总结下上面用到的知识点:修改字体样式:Font(name=字体名称,size=字体大小,bold=是否加粗,italic=是否斜体,color=字体颜色)单元格颜色填充:PatternFill(fill_type=填充样式,start_color=开始颜色, end_color=结束颜色)单元格对齐方式:Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)
水平对齐:‘distributed’,‘justify’,‘center’,‘leftfill’, ‘centerContinuous’,‘right,‘general’;
垂直对齐:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’;设置边框样式:
Side(style=边线样式,color=边线颜色)
Border(left=左边线样式,right=右边线样式,top=上边线样式,bottom=下边线样式)
style参数的种类: 'double, ‘mediumDashDotDot’, ‘slantDashDot’,‘dashDotDot’,‘dotted’,‘hair’, 'mediumDashed, ‘dashed’, ‘dashDot’, ‘thin’,‘mediumDashDot’,‘medium’,
'''from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, fills, colors, Side# 导入表格数据
filePath = r"D:\2021年销售分析\全年数据.xlsx"
wb = load_workbook(filePath)# 操作单元格
ws = wb.active# 调整列宽
ws.column_dimensions["A"].width = 25
ws.column_dimensions["B"].width = 10
ws.column_dimensions["C"].width = 10
ws.column_dimensions["D"].width = 13
ws.column_dimensions["E"].width = 35
ws.column_dimensions["F"].width = 8
ws.column_dimensions["G"].width = 10# 设置单元格格式
# 设置字体格式
font = Font("微软雅黑", size=12, color=colors.BLACK, bold=False)# 单元格颜色填充
fill = PatternFill(fill_type="solid", start_color="CDCDCD", end_color="CDCDCD") #CDCDCD浅灰色# 单元格对齐方式
alignment = Alignment(horizontal="center", vertical="center", indent=0) #wrap_text=True文字换行,shrink_to_fit=True自适应宽度# 单元格边框
bd = Border(left=Side(border_style="thin", color=colors.BLACK),right=Side(border_style="thin", color=colors.BLACK),top=Side(border_style="thin", color=colors.BLACK),bottom=Side(border_style="thin", color=colors.BLACK),outline=Side(border_style="thin", color=colors.BLACK),vertical=Side(border_style="thin", color=colors.BLACK),horizontal=Side(border_style="thin", color=colors.BLACK))# 遍历数据
for row in ws.rows:for cell in row:cell.font = fontcell.fill = fillcell.alignment = alignmentcell.border = bd# 设置表头字体格式
ft = Font("宋体", size=12, color=colors.BLUE, bold=True) # italic=True斜体
ws["A1"].font = ft
ws["B1"].font = ft
ws["C1"].font = ft
ws["D1"].font = ft
ws["E1"].font = ft
ws["F1"].font = ft
ws["G1"].font = ftsavePath = r"D:\2021年销售分析\全年数据-格式调整.xlsx"
# 保存数据
wb.save(savePath)
相关文章:

python使用openpyxl处理excel
文章目录 一、写在前面1、安装openpyxl2、认识excel窗口 二、基本使用1、打开excel2、获取sheet表格3、获取sheet表格 尺寸4、获取单元格数据5、获取区域单元格数据6、sheet.iter_rows()方法7、修改单元格的值8、向表格中插入行数据9、实战:合并多个excel 三、获取E…...

【JavaWeb后端学习笔记】Mybatis基础操作以及动态SQL(增、删、改、查)
Mybatis 0、环境准备0.1 准备数据库表emp;0.2 准备SpringBoot工程0.3 配置文件中引入数据库连接信息0.4 创建对应的实体类0.5 准备Mapper接口 1、MyBatis基础操作1.1 删除1.2 新增(主键返回)1.3 更新1.4 查询(解决字段名与类属性名…...

基于MATLAB野外观测站生态气象数据处理分析实践应用
1.本课程基于MATLAB语言 2.以实践案例为主,提供所有代码 3.原理与操作结合 4.布置作业,答疑与拓展 示意图: 以野外观测站高频时序生态气象数据为例,基于MATLAB开展上机操作: 1.不同生态气象要素文件的数据读写与批处理…...

IP 地理位置定位技术原理概述
本文深入探讨 IP 地理位置定位技术的原理。介绍了 IP 地址的基本概念及其在网络中的作用,随后阐述了基于数据库查询、基于网络拓扑分析以及基于机器学习算法的三种主要 IP 地理位置定位技术原理中的基于IP数据库查询。 IP 地址基础 IP 地址是互联网协议࿰…...

C语言(分支结构)
问题引出 我们在程序设计往往会遇到如下的问题,比如下的函数的计算。 也就是我们是必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句。 条件判断 根据某个条件成立与否,…...

批量将不同的工作簿合并到同一个Excel文件
批量将不同的工作簿合并到同一个Excel文件 下面是一个示例,展示如何批量将不同的工作簿合并到同一个Excel文件,并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下: 步骤 1: 安装必要的库 首先确保你已安装 pan…...

详解AI网关助力配电房实现智能化管控应用
对于一些建设年份久远的老旧配电房,由于配套降温散热设施设备不完善、线路设备老化等因素,极易出现因环境过热而影响设备正常稳定运行,进而导致电气故障甚至火灾等事故产生。 基于AI网关的配电房智能监控及管理 针对配电房的实时安全监测及…...

2025美赛数学建模常用数据库网站大全
优秀模板写作红宝书数学模型获取——更多资料请点击下方名片进群获取。 一、可以查询美国各个领域经济指标的网站: olap.epsnet.com.cnhttps://www.ers.usda.gov/data-products/rice-yearbook/www.ers.usda.govU.S. Energy Information Administration (EIA) www.eia.govhttp…...

Wordpress设置固定链接形式后出现404错误
比如固定连接设置为 /archives/%post_id%.html 这种形式,看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态...

我最近在干什么【1】
前言 打算开一个新系列,偏休闲点的,不是完整全面的技术分享,话题还是聚焦个人成长(学的技术、了解到的信息、看的书……) 方面。文章偏意识流点,单纯分享我最近在干什么,不定期更新,…...

[Vue3]computed原理
Computed原理 不管在是 Vue 2 还是在 Vue 3 中,对 computed 本身的实现原理基本都是一样的。当使用 computed 计算属性时,组件初始化会对每一个计算属性都创建对应的 watcher , 然后在第一次调用自己的 getter 方法时,收集计算属性依赖的所有…...

Vue工程化开发中各文件的作用
1.main.js文件 main.js文件的主要作用:导入App.vue,基于App.vue创建结构渲染index.html。...

【c++笔试强训】(第三十一篇)
目录 最⻓回⽂⼦序列(动态规划-区间dp) 题目解析 讲解算法原理 编写代码 添加字符(字符串) 题目解析 讲解算法原理 编写代码 最⻓回⽂⼦序列(动态规划-区间dp) 题目解析 1.题目链接:最…...

Go 1.19.4 HTTP编程-Day 20
1. HTTP协议 1.1 基本介绍 HTTP协议又称超文本传输协议,属于应用层协议,在传输层使用TCP协议。HTTP协议属是无状态的,对事务处理没有记忆能力,如果需要保存状态需要引用其他技术,如Cookie。HTTP协议属是无连接的&…...

MySQL 8.0 的主主复制(双向复制)
在 Windows Server 2022 Datacenter 上配置 MySQL 8.0 的主主复制(双向复制),步骤与 Linux 类似,但有一些特定的配置和路径需要注意。以下是详细的简化步骤: 1. 使用 root 用户登录 确保你以 root 用户登录到 MySQL …...

四、自然语言处理_03LSTM与GRU
0、前言 随着循环神经网络(RNN)在各种序列数据处理任务中被广泛应用,研究人员逐渐发现了其在处理长序列数据时会容易出现梯度消失(vanishing gradient)和梯度爆炸(exploding gradient)问题&…...

磁盘系列基础知识(一):硬盘;IDE;ATA;SATA;AHCI;SCSI;SAS
磁盘系列基础知识(一)硬盘 IDE ATA SATA AHCI SCSI SAS 硬盘厂家 西部数据Western Digital/WD. 希捷 SEAGATE、三星 SAMSUNG、东之 Toshiba、英特尔 Intel、金士顿 Kingston、闪迪 SanDisk、 英睿达 Crucial、浦科特 Plextor 硬盘类别 HDD (…...

taro小程序进入腾讯验证码
接入原因 昨天突然晚上有人刷我们公司的登录发送短信接口,紧急将小程序的验证码校验更新上去了 接下来就是我们的接入方法,其实很简单,不过有时候可能大家着急就没有仔细看文档,腾讯验证码文档微信小程序地址,注意这里…...

原子类相关
原子引用 JUC 并发包提供了: AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...

RabbitMQ 客户端 连接、发送、接收处理消息
RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务,不是像其他服务器一样,负责逻辑处理,然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息, 第一步&a…...

Java Web 3 Axios Vue组件库
一 Ajax 1 同步 异步 2 原生Ajax 比较繁琐 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…...

双目相机的标定,视差图,深度图,点云生成思路与实现。
该文档记录从双目相机标定到点云生成的所有过程,同时会附上代码。 代码直接能跑。https://github.com/stu-yzZ/stereoCamera 目录 大致思路如下: 一、相机标定 1、相机参数介绍 2、单目相机标定 3、双目相机标定 二、图片畸变矫正 三、极线矫正…...

【H2O2|全栈】MySQL的基本操作(三)
目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询,与单表查询…...

2、C++命名空间
命名空间 命名空间是一种用来避免命名冲突的机制; 原理是将一个全局的作用域分成一个个命名空间,每个命名空间是个单独的作用域,从而有效避免命名冲突。 注意:命名空间定义在全局 命名空间定义格式 使用: …...

Elemenu-UI时间日期单个组件,限制当前日期之后的时间
element的时间日期组件, type"datetime" ,当你设置了:picker-options"pickerOptions"之后 pickerOptions: { disabledDate(time) { return time.getTime() > Date.now(); }, }, 会发现,他只会限制日期,但不…...

flutter修改状态栏学习
在flutter中如何动态更改状态栏的颜色和风格。 前置知识点学习 AnnotatedRegion AnnotatedRegion 是 Flutter 中的一个小部件,用于在特定区域中提供元数据(metadata)以影响某些系统级的行为或外观。它通常用于改变系统 UI 的外观ÿ…...

解决Unity编辑器Inspector视图中文注释乱码
1.问题介绍 新创建一个脚本,用VS打开编辑,增加一行中文注释保存,在Unity中找到该脚本并选中,Inspector视图中预览的显示内容,该中文注释显示为乱码,如下图所示: 2.图示解决步骤 按上述步骤操作…...

关于csgo的游戏作弊与封禁
关于csgo的游戏作弊与封禁 一.关于作弊 什么叫作弊? 1.换肤,换库存 2.各种参(回溯,自瞄,透视,急停,连跳,假身,子弹跟踪等) 3.某一部分更改游戏内存&…...

严格单元测试造就安全软件
在信息技术迅速发展的今天,软件在各个行业中扮演着至关重要的角色,尤其是在汽车行业,其中软件的可靠性和安全性直接影响到人们的生命安全。软件缺陷所带来的潜在风险不容小觑,尤其在涉及到自动驾驶和车辆控制等关键系统时…...

ubuntu 根分区逻辑卷扩容
1、虚拟机关机通过管理界面给磁盘扩容。 rootcurtis:/home/curtis/git_code# pvdisplay--- Physical volume ---PV Name /dev/vda3VG Name ubuntu-vgPV Size <239.00 GiB / not usable 0Allocatable yes (but full)PE…...