Python操作Excel基础

一、使用PythonExcel读写数据

1.模块、包、库概念

  • Module(模块):扩展名为.py的文件就可以称作为模块
  • Package(包):在模块只上的概念,为了方便管理.py模块文件进行打包。包目录下第一个文件必须是_init_.py,否则就是普通的文件夹目录,然后是一些模块文件和子目录,加入子目录中也有_init_.py,那么它就是这个包的子包了
  • Library(库):具有相关功能模块的集合。这也是Python的一大特色,即具有强大的标准库、第三方库以及自定义模块
  • 标准库:就是安装Python是自自带的模块
  • 第三方库:就是由第三方机构发布,具有特定功能的模块,用户也可以自行开发模块供自己和他人使用

2.Excel读取库xlrd

  • 导入模块的格式:import+模块名
  • 导入xlrdimport xlrd,也可以使用别名命名方式import xlrd as xl,后续可以用xl代表xlrd模块
  • 调用的格式为:from+模块名+import+方法名
  • 导入xlrd模块中的open_workbook,写法为:from xlrd import open_workbook as owb,后续可以直接使用owb代表open_workbook工作薄对象
  • ''注意:xlrd只能读取xls格式工作薄数据

3.读取Excel工作薄、工作表信息

  • 在导入读取xls文件的库之后,则需要读取Excel文件的相关信息,以下是一些常见的获取工作薄、工作表对象的方法:
# 导入xlrd模块
import xlrd
# 读取工作薄
wb = xlrd.open_workbook('工作薄名称.xls')
# 读取工作薄下的所有工作表对象
wsobj = wb.sheets()
# 读取工作薄下的所有工作表名称
wsname = wb.sheet_names()
# 按指定名称读取工作表对象-方法1
ws1 = wb.sheet_by_name('工作表名称')
# 按指定序号读取工作表对象-方法2
ws2 = wb.sheet_by_index(1)
# 按指定序号读取工作表对象-方法3
ws3 = wb.sheets()[1]

4.读取Excel行、列信息

  • 常用获取行、列、单元格信息的方法:
# 导入xlrd模块
import xlrd
# 获取工作表对象
ws = xlrd.open_workbook('工作薄名.xls').sheet_by_name('工作表名')
# 获取行号
crow = ws.nrows
# 获取列号
ccol = ws.ncols
# 获取指定行数据
row_data = ws.row_values(行号)
# 获取指定列数据
col_data = ws.col_values(列号)
# 获取单元格数据
cell_data_1	 = ws.cell_value(行号,列号)
# 获取单元格数据
cell_data_2 = ws.cell(行号,列号).value
  • 注意:如果以序号方式获取工作表、单元格的数据,均是从序号0开始的

5.Excel写入库xlwt

  • 使用安装xlwt库,具有创建工作薄、工作表、将数据写入到单元格的功能

6.创建Excel工作薄、工作表和写入单元格

  • xlwt可以创建工作薄、保存工作薄,创建工作表以及将数据写入单元格等常见操作
# 引入xlwt模块
import xlwt
# 新建工作薄
nwb = xlwt.Workbook(encoding = 'utf-8')
# 添加工作表
nws = nwb.add_sheet('工作表名')
# 写入单元格,(第二行,第三列,值)
nws.write(1, 2, '要写入的值')
# 保存工作薄
nwb.save('工作薄名.xls')

7.Excel修改库xlutils

  • xlutils可以修改工作薄,要使用xlutils库就一定要安装xlrd库和xlwt

8.修改工作薄、工作表、单元格

# 导入xlrd模块
import xlrd
# 导入xlutils中的复制模块
from xlutils.copy import copy
# 获取要修改的工作薄
wb = xlrd.open_workbook('工作薄名.xls')
# 复制工作薄
nwb = copy(wb)
# 新建工作表
nws1 = nwb.add_sheet('工作表名')
# 读取工作表
nws2 = nwb.get_sheet(序号)
# 读取工作表
nws3 = nwb.get_sheet('工作表名')
# 将数据写入指定工作表
nws1.write(行号, 列表, '值')
# 保存工作薄
nwb.save('工作薄名.xls')
  • 注意,最后nwb.save保存的工作薄可以和打开时工作薄名一样,也可以不一样,如果一样,则是覆盖原工作薄,不一样则是另存工作薄。代码运行时,被修改的工作薄必须关闭。

二、循环语句与分支语句

1.for...in循环语句

  • 语法格式
for item in iterable:do something
(1)循环字符串
  • for循环语句除了遍历指定范围的序列值,也可以遍历向指定的字符串,将字符串中的每个字符逐个输出
for n in 'python':print(n)
(2)循环指定范围序列数
  • 如果我们要循环指定范围的数据,可以使用range函数,一般通过使用for循环语句来逐个取得数字
  • range函数语法为:range(start, stop, [step])
    • start:计数从start开始,默认是从0开始
    • stop:技术到stop结束,但不包括stop
    • step:步长,默认是1
for n in range(1, 10, 2):print(n)
# 输出1 3 5 7 9
(3)嵌套循环
  • for循环与局可以嵌套使用,但每一层for循环语句注意缩进,下面使用for嵌套循环方式完成九九乘法表的制作
for x in range(1, 10):for y in range(1, x+1):print('%dx%d=%-5d' % (y, x, y * x), end = '')

2.for...in循环语句应用

(1)批量创建工作薄
  • 实例:使用for循环语句创建1到12月工作薄,每个工作薄中创建一个名为统计表的工作表
import xlwt
for m in range(1, 13):# 创建工作薄wb = xlwt.Workbook(encoding = 'utf-8')# 创建工作表,工作薄中至少要有一个工作表wb.add_sheet('统计表')wb.save('%02d 月.xls' % m)
(2)制作九九乘法表
  • 实例:将九九乘法表写入Excel表格中,只需要定位好对应的单元格,然后将格式化好的数据写入单元格即可
import xlwt
# 创建工作薄
wb = xlwt.Workbook(encoding = 'utf-8')
# 创建工作表
ws = wb.add_sheet('乘法表')
for x in range(1, 10):for y in range(1, x + 1):# 将乘法表写入单元格ws.write(x, y, '%dx%d=%d' % (x, y, x * y))
# 保存工作薄
wb.save('乘法表.xls')

3.while循环语句

  • 语法格式
while condition:do something
  • 循环打印
n = 0
while n < 5:n += 1print(n)
# 打印1 2 3 4
  • 嵌套语句,制作九九乘法表
x, y = 0, 0
while x < 9:x += 1while y < x:y += 1print('%dx%d=%02d\t' % (y, x, x * y), end = '')# 将内变量初始化为0,方便下一次内层循环又从0开始y = 0# 换行print('')

4.while循环语句应用

(1)读取工作薄信到列表
  • 实例:将”招生表.xls“工作表下的所有工作表名称写入”统计结果.xls“工作薄下的“统计表”,并且哥每个工作表编写一个序号
import xlrd, xlwt
wb = xlrd.open_workbook('招生表.xls')
nwb = xlwt.Workbool(encoding = 'utf-8')
nws = nwb.add_sheet('统计表')
n = 0
# 当n小于工作表个数则循环
while n < wb.sheets().__len__():# 将序号写入第1列nws.wirte(n, 0, '表%d' % n)# 将工作薄下表明写入第2列nws.wirte(n, 1, wb.sheets()[n].name)n += 1
nwb.save('统计结果.xls')
(2)批量创建工作薄、工作表
  • 实例:新建20152018年工作薄文件,每个工作薄文件中再分别新建112月的工作表
import xlwt
y, m = 2015, 1
while y <= 2018:nwb = xlwt.Workbook(encoding = 'utf-8')while m<= 12:nwb.add_sheet('%d年%d月' % (y, m))m += 1nwb.save('%d年.xls' % y)y +=1m = 1

5.if条件语句

  • 语法格式
if conditional test:do something
  • 判断分数
# 输入要判断分数
score = input('请输入分数:')
# 将字符型数字转换为整数
score = int(score)
if score > 90:print('优秀')

6.if...else条件语句

  • 判断分数大于等于90分,返回“优秀”,否则返回“普通”
score = input('请输入分数:')
score = int(score)
if socre > 90:print('优秀')
else: print('普通')

7.if语句应用

(1)将筛选结果写入新工作薄
  • 实例:将指定工作薄指定工作表下语文、数学两列成绩同时大于等于80的记录写入新工作薄
import xlrd, xlwt
wb = xlrd.open_workbook('成绩表.xls')
ws = wb.sheet_by_name('分数表')
nwb = xlwt.Workbook(encoding = 'utf-8')
nws = nmb.add_sheet('结果')
n, m = 0, 0
while n < ws.nrows - 1:n += 1# 判断两科成绩是否大于等于80分if ws.cell_value(n, 1) >= 80 and ws.cell_value(n, 2) >= 80:# 累加m变量,作为条件成立时写入的行号m += 1# 写入姓名nws.write(m, 0, ws.cell_value(n, 0))# 写入语文成绩nws.write(m, 1, ws.cell_value(n, 1))# 写入数学成绩nws.write(m, 2, ws.cell_value(n, 2))
# 写入标题
nws.write(0, 0, '姓名')
nws.write(0, 1, '语文')
nws.write(0, 2, '数学')
nwb.save('筛选结果.xls')
(2)根据总分判断等级
  • 实例:判断语文和数学两个科目之和时属于哪个级别
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('成绩单.xls')
ws = wb.sheet_by_name('分数表')
# 复制读取工作薄
nwb = copy(wb)
# 读取工作表
nws = nwb.get_sheet('分数表')
n = 0
while n < ws.norws - 1:n += 1# 将语文和数学成绩相加subtotal = ws.cell_value(n, 1) + ws.cell_value(n, 2)if subtotal >= 180:nws.write(n, 3, '优秀')elif subtotal >= 160:nws.write(n, 3, '良好')elif subtotal >=120:nws.write(n, 3, '中等')else:nws.write(n, 3, '差')
nwb.save('成绩表.xls')
8.break语句
  • 终止break语句所在的循环,当循环或判断之行动break语句时,即使判断条件为True或者序列尚未完全被遍历,都会跳出循环或判断
  • for循环语句中的break应用
for c in 'abcdefg':if c == 'd':# 跳出当前for循环breakelse:print(c)
  • while循环语句中的break应用
n = 0
while True:n += 1if n == 5:breakelse:print(n)

9.continue语句

  • 当循环或判断执行到continue语句时,continue后的语句将不再执行,会跳出当次循环,继续执行循环中的下一次循环
  • for循环语句中的continue应用
for c in range(1, 11):if c ==5:print('我是5')# 跳出当次循环,不再执行此语句之后的语句,继续下一次循环continueprint(c)
  • while循环语句中的continue应用
n = 0
while n < 6:n += 1if n == 3:print('我是3')# 跳出当次循环,不再执行此语句之后的语句,继续喜爱次循环continueprint(n)

10.综合应用

  • 实例:要求统计出业绩表中每个人的累计业绩,大于等于1000表示达标,需要统计出开始达标的月份以及业绩
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('业绩表.xls')
# 读取工作薄下的业绩统计工作表
ws = wb.sheet_by_name('Sheet1')
# 复制工作薄
nwb = copy(wb)
# 读取工作薄下的统计结果工作表
nws = nwb.get_sheet('统计结果')
subtotal, n = 0, 0
# 遍历行号
for r in range(1, ws.nrows):# 遍历列号for c in range(1, 13):# 累加业绩数据subtotal += ws.cell_value(r, c)if subtotal >= 1000:n += 1# 将姓名写入单元格nws.write(n, 0, ws.cell_value(n, 0))# 将月份写入单元格nws.write(n, 1, '%d月份' % c)# 将业绩写入单元格nws.write(n, 2, subtotal)# 退出当前循环break# 重置变量subtotal = 0
nwb.save('业绩表.xls')

三、字符串处理技术

1.字符串切片

  • 字符串时最常用的一种数据类型,Python中的字符串时不能修改的,只能做提取、拆分、合并重组等操作
(1)提取单个字符
  • 提取字符串中指定的位置的单个字符,表示方式为:str[位置],既可以从开头计算,也可以从结尾计算
  • 从开头计算单个字符的表示方法
str = 'Excel'
print(str[0], srt[2])
# 返回值为:E c
  • 从结尾提取单个字符的表示方法:
str = 'Excel'
print(str[-1], str[-2])
# 返回值为:l e
(2)提取多个字符
  • 提取字符串中某一段字符的表示方式为:str[开始位置:结束位置]
str = 'Excel'
# 从左计算:指定的起始位置到指定的终止位置
print(str[1:3]) # 返回值:xc
# 从左计算:从开头提取到指定位置
print(str[:3]) # 返回值:Exc
# 从左计算:从指定的其实位置到结束
print(str[2:]) # 返回值:cel
# 从右计算:指定的其实位置到指定的终止位置
print(str[-3:-1]) # 返回值:ce
# 从右提取:指定的其实位置到结束
print(str[-3:]) # 返回值:cel
# 提取所有字符串
print(str[:]) # 返回值:Excel
  • 字符串提取还可以设置步长值,表示方式为:str[开始位置:结束位置:步长值]

2.字符串切片应用

(1)整理工作表数据
  • 将成表工作薄分数表中的第1列的部门和姓名分别提取到新工作博中的不同列
import xlrd, xlwt
wb = xlrd.open_workbook('成绩表.xls')
ws = wb.sheet_by_name('分数表')
nwb = xlwt.Workbook(encoding='utf-8')
nws = nwb.add_sheet('Sheet1')
n = 0
# 循环分数表中第1列的数据
for c in ws.col_vlaues(0):# 提取第1列中的部门数据,并写入nws.write(n, 0, c[:3])# 提取第1列中的姓名数据,并写入nws.write(n, 1, c[4:])# 提取第2列的数据nws.write(n, 2, ws.cell_value(n, 1))n += 1
nwb.save('结果表.xls')

3.字符串长度(个数)统计

(1)len
  • len方法返回对象(字符、列表、元组等)长度或项目个数
print(len('Excel')) # 返回值为5
(2)count
  • count方法用于统计字符串里指定字符串出现的次数,可选参数为在字符串搜索的开始与结束位置
  • 语法格式:str.count(sub, start=0, end = len(string))
    • str:被搜索的父字符串
    • sub:搜索的子字符串
    • start:字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0
    • end:字符串中结束搜索的位置。字符中第一个字符的索引为0。默认为字符串的最后一个位置
s = '销售部-张三,财务部-李四,销售部-王五,销售部-琳琳'
print(s.count('销售部')) # 统计销售部在字符串出现的次数
print(s.count('销售部'), 5) # 指定搜索字符串的起始位置
print(s.count('销售部', 5, 18)) # 指定搜索字符串的起始和结束位置
  • 实例:分别统计“优,良,中,差”4个等级出现的次数
import xlrd
wb = xlrd.open_workbook('等级表.xls')
ws = wb.sheet_by_name('Sheet1')
n, m = 0, 0
for l in '优良中差':# 循环行号while n < ws.nrows - 1:n += 1# 累加等级次数m += ws.cell_value(n, 1).count()print(m) # 打印等级出现的次数n, m = 0, 0

4.字符串查找

(1)index
  • index方法用于从字符串中找出某个对象第一个匹配项的索引位置,如果查找的字符串不存在会报一个异常
  • 语法格式:str.index(sub, [start = 0], [end = len(str)])
    • str:父字符串
    • sub:指定检索的子字符串
    • start:可选参数,开始索引,默认为0(可单独指定)
    • end:可选参数,结束索引,默认为字符串的长度(不能单独指定)
s = 'A组89,B组98,C组100,D组78,B组74'
print(s.index('B组')) # 返回每一个匹配项的索引位置
print(s.index('B组', 6)) #指定查找的起始位置
print(s.index('B组', 6, 15)) # 指定查找的起始位置和终止位置,不存在查找字符,抛出异常
(2)find
  • find方法从字符串中找出某个子字符串,第一个匹配项的索引位置,该方法与index方法一样,如果子字符串不在字符串中不会报异常,而是返回-1
  • 实例:统计等级“优”在下半年数量
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('等级表.xls')
ws = wb.sheet_by_name('Sheet1')
nwb = copy(wb)
# 读取工作表数据
nws = nwb.get_sheet('Sheet1')
n = 0
while n < ws.nrows - 1:n += 1# 获取要处理的单元格s = ws.cell_value(n, 1)# 将统计结果写入单元格nws.write(n, 2, s.count('优', s.find('\n')))
nwb.save('等级表.xls')

5.字符串的替换

  • replace方法用于把字符串中指定的就子字符串替换成指定的新子字符串,如果指定count可选参数则替换指定的次数,默认全部替换
  • 语法格式:str.replace(old, new, [count = str.count(old)])
    • old:指定的就子字符串
    • new:指定的新子字符串
    • count:可选参数,替换的次数,默认为指定的旧子字符串在字符串中出现的总次数
S = 'A组-优秀;B组-良好;C组-优秀;D组-优秀'
print(S.replace('优秀', '(晋级)'))
# 返回值为:A组-(晋级);B组-(晋级);C组-(晋级);D组-(晋级)
print(S.replace('优秀', '(晋级)', 1))
# 返回结果为:A组-(晋级);B组-良好;C组-优秀;D组-优秀
print(S.replace('优秀', '(晋级)', 2))
# 返回结果为:A组-(晋级);B组-良好;C组-(晋级);D组-优秀
  • 实例:将编号两侧的横线用括号替换
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('等级表.xls')
ws = wb.sheet_by_name('Sheet1')
# 复制工作薄
nwb = copy(wb)
nws = nwb.get_sheet('Sheet1')
n = 0
while n < ws.nrows - 1:n += 1# 读取需要替换的单元格值val = ws.cell_vlaue(n, 0)# 将格式为“产品A-NED001-5478-8848”的值替换为“产品A(NED001)5478-8848”nws.write(n, 1, val.replace('-', '(', 1).replace('-',')', 1))
nwb.save('替换格式等级表.xls')

6.字符串的拆分与合并

(1)split
  • split方法拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表list
  • 语法格式:str.split(str = '', num = string.count(str))
    • str:表示为分隔符,默认为空格,但是不能为空(''),若字符串中没有分隔符,则把整个字符串作为列表的一个元素
    • num:表示分割次数。如果存在参数num,则仅分隔成num+1个子字符串,并且每个子字符串可以付给新的变量
s = '张三、李 四、王二  麻子、小明'
print(s.split()) # 返回值:['张三、李', '四、王二', '麻子、小明']
print(s.split('、')) # 返回值:['张三', '李 四', '王二  麻子', '小明']
print(s.split('、', 2)) # 返回值:['张三', '李 四', '王二  麻子、小明']
print(list(s)) # 返回值:['张', '三', '、', '李', ' ', '四', '、', '王', '二', ' ', ' ', '麻', '子', '、', '小', '明']
(4)join
  • join方法用于将序列中的元素以指定的爱抚连接成一个新的字符串
  • 语法格式:str.join(sequence)
    • sequence:要连接的元素序列、字符串、元素、字典
l = ['a', 'b', 'c']
print('-', l) # 返回值:a-b-c

四、列表处理技术

1.列表基础

  • 列表是python中最常用的对象,熟练掌握列表的各种操作非常关键。列表的格式为[元素1,元素2,元素3...]
  • 列表中元素的数据类型,可以是任意数据类型,但要注意正确的表达方式
  • 列表中可以嵌套列表

2.列表切片

  • python中符合序列的有序序列都支持切片,例如:列表、字符串、元组
  • 语法格式:[start:end:step]
    • start:起始索引,从0开始,-1表示结束
    • end:结束索引
    • step:步长,步长为正时,从左向右取值;步长为负时,反向取值
  • 注意切片的结果不包含结束索引,即不包含最后一位,-1代表列表的最后一个位置索引
l = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(l[2:6]) # ['c', 'd', 'e', 'f']
print(l[:4]) # ['a', 'b', 'c', 'd']
print(l[5:]) # ['f', 'g']
print(l[-5:-2]) # ['c', 'd', 'e']
print(l[-3:]) # ['e', 'f', 'g']
print(l[-6:6]) # ['b', 'c', 'd', 'e', 'f']
print(l[2:-1]) # ['c', 'd', 'e', 'f']
print(l[:]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(l[::2]) # ['a', 'c', 'e', 'g']

3.列表的增加、删除、修改

(1)列表元素的修改
l = ['a-黄瓜', 'b-南瓜', 'c-冬瓜', 'd-苦瓜', 'e-西瓜']
l[2] = 'c-我不是冬瓜'
(2)列表元素的增加
l = ['张三']
l = ['李四'] + l # 加号添加
l.append('王二') # append添加
l.insert(2, '麻子') # insert插入添加,指定位置
(3)列表元素的删除
l2 = ['a-黄瓜', 'b-南瓜', 'c-冬瓜', 'd-苦瓜', 'e-西瓜']
# 删除-指定下表删除,没有该元素时报错
l2.pop()
l2.pop(0)
# 删除-按指定值删除
l3 = ['a-黄瓜', 'b-南瓜', 'c-冬瓜', 'd-苦瓜', 'e-西瓜']
l3.remove('c-冬瓜')
# 删除-del语句删除
l4 = ['a-黄瓜', 'b-南瓜', 'c-冬瓜', 'd-苦瓜', 'e-西瓜']
del l4[-2]
# 清空列表
l4 = ['a-黄瓜', 'b-南瓜', 'c-冬瓜', 'd-苦瓜', 'e-西瓜']
l5.clear()

4.实例应用

  • 汇总每个人的总成绩
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('成绩统计表.xls')
ws = wb.sheet_by_name('成绩')
nwb = copy(wb)
nws = nwb.get_sheet('Sheet2')
n = 0; m = 0
# 循环行号
while n < ws.nrows - 1:n += 1# 拆分提取分数,数据格式为:语文-89-数学-85-历史96,转换后格式为:['89','85','96']l = ws.cell_value(n, 1).split('-')[1::2]# 循环分数列表for v in l:# 转换累加分数m += int(v)# 将姓名写入A列单元格nws.write(n, 0, ws.cell_value(n, 0))# 将总分写入B列单元格nws.writ(n, 1, m)# 再次初始化m总分数变量m = 0
nwb.save('成绩统计表.xls')

5.列表操作符

(1)基础操作符
  • 组合:+
  • 重复:*
  • 元素是否存在于列表中:in
# 组合
print([1, 2, 3] + [100, 200])
# 重复
print([1, 2, 3] * 4)
# 指定值在列表中是否存在
print(1 in [1, 2, 3])
  • 实例:判断指定姓名在指定日期是否值班
import xlrd
from xlutils.copy import copy
wb = xlrd.open_workbook('值班表.xls')
ws = wb.sheet_by_name('值班表')
nwb = copy(wb)
nws = nwb.get_sheet('值班表')
r = 0
while r < ws.nrows -1:r += 1# 读取要判断的行列表row = ws.row_values(r)# 判断小明在行列表中是否存在if '小明' in row:nws.write(r, 6, '√')else:nws.write(r, 6, 'x')
nwb.save('值班表.xls')

6.列表操作符

  • 列表推导式是Python基础,好用又重要的功能,也是最受欢迎的Python特性之一,可以说掌握它是成为合格Python程序员的基本标准。本质上可以吧列表推导式理解成一种集合了转换和筛选共功能的函数,通过这个函数把一个列表转换成另一个列表。注意是另一个新列表,原列表保持不变
(1)列表推导
  • [表达式 for 变量 in 列表]
(2)列表嵌套推导
  • [表达式 for 变量1 in 列表1 for 变量2 in 列表2]
(3)条件列表推导
  • [表达式 for 变量1 in 列表 if 条件]
l1 = ['83', '98', '91', '100']
l2 = [x for x in l1]
print(l2) # [83,98,91,100]
l3 = [[98,86,74,85],[96,99,75,92],[69,93,87,85]]
l4 = [[x+100 for x in l] for l in l2]
print(l4) # [[198,186,174,185],[196,199,175,192],[169,193,187,185]]

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

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

相关文章

爬虫爬取数据遇到302,301重定向如何获取重定向后的地址(完美解决)

当用java或者python爬取目标网站的时候&#xff0c;浏览器可以正确重定向&#xff0c;而用编程爬取始终是code:200 只需要将请求头修改成如下&#xff0c;可以根据需要进行更改 Map<String, String> headers Map.of("Accept", "text/html,application/xh…

【征服Redis10】一文理解redis为什么这么快

Redis之所以一统分布式缓存的江湖&#xff0c;其中一大优势就是快&#xff0c;到底有多快呢&#xff1f;官方测试数据表明每秒可以处理13万次set或者lpush请求&#xff0c;执行lua调用可以达到12万次之多。一般来说&#xff0c;我们的Java服务&#xff0c;单台服务qps到达1000就…

ECharts实现简单饼图和柱状图

1.饼图 前端使用vue&#xff0c;后端使用SpringBoot <template><div><div class"card" style"padding: 15px">数据可视化分析&#xff1a;图书类型销量</div><div style"display: flex; margin: 10px 0"><di…

银行是地球村最大“车主”

有网友调侃说中国的银行已经成了地球村里最大的“房东”&#xff0c;这话的可信度高。可是&#xff0c;中国的银行还渐渐的在成为地球村里最大的“车主”。此言并非耸人听闻&#xff0c;“80多家4s店被查封 银行连夜拖车 网络炸锅”这新闻可佐证。 截图&#xff1a;来源今日国内…

Android分区挂载原理介绍(上)

一、 device-mapper基本原理介绍 1.1 dm工作原理 1.2 dm实现动态卷(逻辑分区)功能介绍(dm-linear) 1.3 dm 实现完整性校验功能介绍(dm-verity) 1.4 元数据加密(default-key) 1.5 dm实现快照功能介绍(snapshot,snapshot-origin,dm-snapshot-…

根据IP查找城市 - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 某业务需要根据终端的IP地址获取该终端归属的城市&#xff0c;可以根据公开的IP地址池信息查询归属城市。 地址池格式如下&#xff1a; 城市名起始IP&#xff0c;结束IP 起始和结束地址按照英文逗号分隔&#xff0…

python字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &…

非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (I - 原理与算法)

Title: 非线性最小二乘问题的数值方法 —— 狗腿法 Powell’s Dog Leg Method (I - 原理与算法) 文章目录 I. 前言II. 线搜索类型和信赖域类型1. 线搜索类型 —— 最速下降法2. 信赖域类型3. 柯西点 III. 狗腿法的原理1. 狗腿法的构建2. 狗腿法的优化说明3. 狗腿法的插值权重 I…

Java 全栈知识点问题汇总(上)

Java 全栈知识点问题汇总&#xff08;上&#xff09; 1 Java 基础 1.1 语法基础 面向对象特性&#xff1f;a a b 与 a b 的区别3*0.1 0.3 将会返回什么? true 还是 false?能在 Switch 中使用 String 吗?对equals()和hashCode()的理解?final、finalize 和 finally 的不同…

Git 配置与理解

简述 Git 在 Windows 和 Ubuntu 中的配置&#xff0c;以及对 Git 工作区域划分和 Git 中对于文件状态划分的理解。 git 基础安装与配置 基于 WSL 的 Ubuntu 下的 git 打开或关闭Windows功能 -> Hyper-V、Virtual Machine Platform、Windows Subsystem for Linux # 1.必须…

STM32407用汇顶的GT911触摸芯片调试实盘

这个配置很关键 代码 #include "stm32f4xx.h" #include "GT9147.h" #include "Touch.h" #include "C_Touch_I2C.h" #include "usart.h" #include "delay.h" #include "LCD.h" #incl…

x86 和 x64 arm的区别

x86和x64是基于英特尔x86架构的复杂指令集架构&#xff08;ISA&#xff09;&#xff0c;而ARM是一种精简指令集架构。 什么是指令集架构 假设我们现在要开发一个cpu&#xff0c;就好比说我们去修建一栋楼&#xff0c;开发商会先将图纸设计好。设计好之后由施工单位按照设计图…

openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c

文章目录 openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c概述笔记END openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c 概述 DSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公…

基于SSM的图书馆管理系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书馆管理系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Sp…

win系统环境搭建(十四)——Windows系统下使用docker安装mysql8和mysql5.7

windows环境搭建专栏&#x1f517;点击跳转 win系统环境搭建&#xff08;十四&#xff09;——Windows系统下使用docker安装mysql8和mysql5.7 文章目录 win系统环境搭建&#xff08;十四&#xff09;——Windows系统下使用docker安装mysql8和mysql5.7MySQL81.新建文件夹2.创建…

windows开机默认启动某个程序

在Windows操作系统中&#xff0c;你可以通过将程序添加到“启动”文件夹或使用任务计划程序来实现开机自动启动某个程序。以下是两种常见的方法&#xff1a; 方法 1&#xff1a;使用“启动”文件夹 找到启动文件夹 按 Win R 打开运行对话框。输入 shell:startup&#xff0c;然…

Webpack5入门到原理1:前言

为什么需要打包工具&#xff1f; 开发时&#xff0c;我们会使用框架&#xff08;React、Vue&#xff09;&#xff0c;ES6 模块化语法&#xff0c;Less/Sass 等 css 预处理器等语法进行开发。 这样的代码要想在浏览器运行必须经过编译成浏览器能识别的 JS、Css 等语法&#xf…

Golang 中的反射,并用来获取数据类型

Go语言提供了一种机制在运行中获取某个变量的类型&#xff0c;获取或修改变量的值&#xff0c;调用变量的方法。 示例代码如下 1. 使用 x.(type)获取变量类型 package mainimport "strconv" //StrPrint 将几种已知数据类型转化为 string func StrPrint(x interfac…

设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务&#xff0c;这个与结构型模式有点像&#xff0c;结构型可以理解为静态的组合&#xff0c;例如将不同的组件拼起来成为一个更大的组件&#xff1b;而行为型更是一种动态或者具有某个…

three.js从入门到精通系列教程016 - three.js通过OrbitControls对立方体实现旋转和缩放

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>three.js从入门到精通系列教程016 - three.js通过OrbitControls对立方体实现旋转和缩放</title><script src"ThreeJS/three.js"></script><…