网站做的拖管不行 怎么投诉,杭州建设工程网,有哪些设计网站,网站推广怎么优化#x1f468;#x1f4bb;个人主页#xff1a;开发者-曼亿点
#x1f468;#x1f4bb; hallo 欢迎 点赞#x1f44d; 收藏⭐ 留言#x1f4dd; 加关注✅!
#x1f468;#x1f4bb; 本文由 曼亿点 原创
#x1f468;#x1f4bb; 收录于专栏#xff1a… 个人主页开发者-曼亿点
hallo 欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 曼亿点 原创
收录于专栏机器学习
⭐⭐
— 文章目录 ⭐⭐⭐前言⭐ 一、xlwings库简介 二、读写Excel工作表1读取Excel工作表2写入Excel工作表 三、批量处理数据 四、合并多个Excel工作表 五、拆分Excel工作表结束语 ⭐前言⭐ 工作中经常需要将一个Excel工作表中的数据按一定的规则分类填写到多个相同格式的工作表中如将出货记录按出货日期分类生成多张出货清单。本任务将带领大家编写Python程序利用xlwings库操作Excel工作表批量生成出货清单。 一、xlwings库简介 Python提供了多种库操作Excel如XlsxWriter、xlrd、xlwt、xlutils、openpyxl和xlwings等其功能对比如表1所示。 从表1可以看出xlwings库的功能最齐全它不仅能读、写和修改两种格式的工作簿xls和xlsx还能批量处理多个工作簿。此外xlwings库还可以与pandas库结合使用实现更强大的数据输入和分析功能。但使用xlwings库时系统必须安装Excel软件。 xlwings库的逻辑结构如图1所示。其中App即应用表示Excel程序Book表示工作簿Sheet表示工作表Range表示区域既可以是一个单元格也可以是单元格区域。从图1可以看出使用xlwings库操作Excel时可以同时启动多个App一个App可以打开多个Book一个Book可以打开多个Sheet一个Sheet可以对多个Range进行操作。 使用xlwings库操作Excel的基本步骤按照xlwings库的逻辑App→Book→Sheet→Range操作即可最后关闭Book和退出App。
【温馨提示】xlwings库不是Python内置的标准库使用之前需要安装。 二、读写Excel工作表 1读取Excel工作表
读取Excel工作表首先须启动Excel程序可以用下面代码实现。 import xlwings #导入xlwings库 app xlwings.App(visibleFalse, add_bookFalse)#启动Excel程序 其中app表示App对象visible表示Excel程序窗口的可见性如果为True则显示Excel程序窗口否则隐藏Excel程序窗口即后台运行缺省时为Trueadd_book表示启动Excel程序后是否新建工作簿如果为True则新建一个工作簿否则不新建工作簿缺省时为True。
启动Excel程序后须打开工作簿可以用下面代码实现。 workbook app.books.open(bookname) 其中workbook表示Book对象bookname表示要打开的工作簿名即Excel文件名。打开工作簿后须打开工作表可以用下面两种方法实现。 worksheet workbook.sheets[index] worksheet workbook.sheets[sheetname] 其中worksheet表示Sheet对象index表示工作表在工作簿中的索引按工作表打开的顺序从后往前排序最后一个打开的工作表索引为0sheetname表示工作表名。 打开工作表后就可以使用range()方法读取指定区域内的数据了。例如读取单元格A1中的数据可以用下面代码实现。 worksheet.range(‘A1’).value 如果想要读取单元格区域的数据如A1到A10一列的数据、A1到G1一行的数据、A1到G10的10行7列的数据可以用下面代码实现。 #读取A1到A10一列的数据 value1 worksheet.range(‘A1:A10’).value #读取A1到G1一行的数据 value2 worksheet.range(‘A1:G1’).value #读取A1到G10的10行7列的数据 value3 worksheet.range(‘A1:G10’).value 其中value1和value2为一维列表value2为二维列表。 如果不能确定工作表中具体区域的范围可以使用expand()方法读取指定区域后所有的数据。例如读取整个工作表的数据可以用下面代码实现。 worksheet.range(‘A1’).expand().value 读取数据完成后应通过Book对象调用close()方法关闭工作簿以及App对象调用quit()方法退出Excel程序。
【温馨提示】 S还可以直接使用单元格名读取区域的数据上述读取数据的操作也可以用下面的代码实现。 worksheet[‘A1’].value worksheet[‘A1:A10’].value worksheet[‘A1:G1’].value worksheet[‘A1:G10’].value 【例1】 读取成绩表。 【问题分析】本例读取并输出成绩表中序号为3、序号为15和所有学生的成绩以及所有学生的姓名“初三(1)班成绩表.xlsx”的内容如图11-2所示。从图11-2可以看出序号为3的学生成绩的区域为第4行即A4J4序号为15的学生成绩的区域为第2行到第6行即A2J6所有学生成绩的区域为第1行后的整个表格即A2后的所有区域所有学生姓名的区域为第3列即C2C11。 【参考代码】
import xlwings #导入xlwings库
app xlwings.App(visibleFalse, add_bookFalse)#启动Excel程序
#打开工作簿
book app.books.open(初三成绩表\\初三(1)班成绩表.xlsx)
sheet book.sheets[sheet1] #打开工作表
print(序号为3的学生成绩\n, sheet.range(A4:J4).value)
print(序号为15的学生成绩\n, sheet.range(A2:J6).value)
print(所有学生的成绩\n, sheet.range(A2).expand().value)
print(所有学生的姓名\n, sheet.range(C2:C11).value)
book.close() #关闭工作簿
app.quit() #退出Excel程序【运行结果】 程序运行结果如图所示。
2写入Excel工作表
将数据写入Excel工作表很简单只需将数据赋值给对应的区域然后通过Book对象调用save()方法保存工作簿即可。例如将列表[1,2,3,4,5]添加到工作表worksheet中的第一行可以用下面代码实现。 worksheet.range(‘A1’).value [1,2,3,4,5] workbook.save() 此外还可以用add()方法新建工作簿和工作表写入数据可以用下面代码实现。 workbook app.books.add() #新建工作簿 worksheet workbook.sheets.add(sheetname) #新建工作表 workbook.save(bookname) #命名并保存工作簿 这里需要注意的是使用add()方法新建工作簿时无法命名须在使用save()方法保存工作簿时命名。此外新建工作簿时会默认新建一个“Sheet1”工作表。【例2】 新建文件并写入成绩表。 【问题分析】首先新建工作簿并在其中新建工作表“初三(1)班”然后读取“初三(1)班成绩表.xlsx”的内容将其写入“初三(1)班”工作表中接着将新建工作簿命名为“成绩表.xlsx”并保存最后关闭工作簿和退出Excel程序。 【参考分析】
import xlwings #导入xlwings库
app xlwings.App(visibleFalse, add_bookFalse)#启动Excel程序
book1 app.books.add() #新建工作簿book1
sheet1 book1.sheets.add(初三(1)班) #新建工作表sheet1
#打开工作簿book2
book2 app.books.open(初三成绩表\\初三(1)班成绩表.xlsx)
sheet2 book2.sheets[sheet1] #打开工作表sheet2
#读取sheet2中的内容并赋值给value_list
value_list sheet2.range(A1).expand().value
#将value_list写入sheet1
sheet1.range(A1).value value_list
book1.save(成绩表.xlsx) #命名并保存book1
book1.close() #关闭book1
book2.close() #关闭book2
app.quit() #退出Excel程序【运行结果】 运行程序将会在当前文件夹中生成“成绩表.xlsx”文件其内容如图所示。 三、批量处理数据 利用Python可以更高效地对多个Excel工作簿进行批量操作如批量替换单元格数据、批量计算行或列数据的和等。批量处理数据时可以先将工作簿中的所有数据提取出来进行处理然后再将结果写入工作表避免频繁读取降低效率。 【例 3】 批量计算每个班级的成绩表中每个学生的总成绩并写入成绩表中。 【问题分析】 “初三成绩表”文件夹中只包含3个文件分别为“初三(1)班成绩表.xlsx”“初三(2)班成绩表.xlsx”和“初三(3)班成绩表.xlsx”内容见图11-2。想要计算每个工作簿中每个学生总成绩须首先获取该文件夹中的文件列表然后遍历文件列表判断文件扩展名是否不为“.xlsx”或文件名是否以“~$”开头如果是则结束本次循环否则读取该文件中的成绩返回二维成绩列表计算每个一维数据的和即总成绩添加到列表中最后将成绩列表写入该文件。
【温馨提示】因为Excel程序在打开一个工作簿时会生成一个文件名以“~ ”开头的临时文件如果 E x c e l 程序非正常退出该临时文件会在文件夹中保留下来所以须判断文件名是否以“ ”开头的临时文件如果Excel程序非正常退出该临时文件会在文件夹中保留下来所以须判断文件名是否以“~ ”开头的临时文件如果Excel程序非正常退出该临时文件会在文件夹中保留下来所以须判断文件名是否以“ ”开头避免处理此类临时文件。
【参考代码】
import xlwings #导入xlwings库
import os #导入os库
app xlwings.App(visibleFalse, add_bookFalse)#启动Excel程序
path os.chdir(初三成绩表) #设置当前工作路径
folder os.listdir(path) #获取当前工作路径下所有文件列表
for file in folder: #遍历文件列表#如果文件扩展名不为“.xlsx”或文件名以“~$”开头if (.xlsx not in file) or (file.startswith(~$)):continue #结束本次循环book app.books.open(file) #打开工作簿sheet book.sheets[Sheet1] #打开工作表sheet.range(K1).value 总分 #在单元格K1写入“总分”#获取单元格A2后所有数据并返回二维成绩列表score_list sheet.range(A2).expand().valuefor index, score in enumerate(score_list): #遍历二维成绩列表total sum(score[3:]) #计算总成绩#将总成绩添加到每个学生一维成绩列表中score_list[index].append(total)sheet.range(A2).value score_list #将二维成绩列表写入工作表book.save() #保存工作簿book.close() #关闭工作簿app.quit() #退出Excel程序【运行结果】 运行程序“初三成绩表”文件夹中的3个文件都会添加一列即总分。其中“初三(1)班成绩表.xlsx”的内容如图所示。 四、合并多个Excel工作表 Python可以将多个工作簿中的数据快速合并为一个工作表。 【例 4】 合并班级成绩表并按总成绩降序排名。 【问题分析】“ 本例题将“初三成绩表”文件夹中的3个文件“初三(1)班成绩表.xlsx”“初三(2)班成绩表.xlsx”和“初三(3)班成绩表.xlsx”合并并按总成绩排名保存到新建的“年级排名表.xlsx”的“初三排名表”工作表中。 首先获取“初三成绩表”文件夹中的文件列表接着遍历文件列表判断文件扩展名是否不为“.xlsx”或文件名是否以“~$”开头如果是则结束本次循环否则读取文件第一行表头header以及该文件中的成绩并将返回的二维成绩列表添加到年级成绩列表all_list中然后对all_list按总成绩进行降序排序并循环在每个学生成绩中添加年级排名再新建工作簿和工作表将header、all_list和序号列表写入新建的工作表最后保存和关闭工作簿以及退出Excel程序。
【参考代码】 import xlwings #导入xlwings库
import os #导入os库
app xlwings.App(visibleFalse, add_bookFalse)#启动Excel程序
path os.chdir(初三成绩表) #设置当前工作目录
folder os.listdir(path) #获取当前工作目录下所有文件列表
all_list [] #定义年级成绩列表
for file in folder: #遍历文件列表#如果文件扩展名不为“.xlsx”或文件名以“~$”开头if (.xlsx not in file) or (file.startswith(~$)):continue #结束本次循环book app.books.open(file) #打开工作簿booksheet book.sheets[Sheet1] #打开工作表sheetheader sheet.range(A1:K1).value #获取表头all_list[i].append(i1)
book_new app.books.add() #新建工作簿book_new
sheet_new book_new.sheets.add(初三排名表)#新建工作表sheet_new
header.append(年级排名) #在表头中添加“年级排名”
#将表头写入sheet_new
sheet_new.range(A1).value header
#将年级成绩列表写入sheet_new
sheet_new.range(A2).value all_list
#生成1len(all_list)1的数字列表
num_list list(range(1, len(all_list) 1))
#将数字列表作为序号列写入sheet_new
sheet_new.range(A2).options(transposeTrue).valuenum_list
book_new.save(年级排名表.xlsx) #保存book_new
book_new.close() #关闭book_new
book.close() #关闭book
app.quit() #退出Excel程序【运行结果】 运行程序将会在“初三成绩表”文件夹中创建“年级排名表.xlsx”文件其内容如图所示。 五、拆分Excel工作表 Python还可以将一个工作表按一定的规则快速拆分为多个工作表。 【例 5】 拆分年级排名表按班级保存每个班学生成绩。 【问题分析】 本例题将“初三成绩表”文件夹中“年级排名表.xlsx”按班级拆分为3个文件分别为“初三(1)班排名表.xlsx”“初三(2)班排名表.xlsx”和“初三(3)班排名表.xlsx”。 首先打开“年级排名表.xlsx”中的“初三排名表”工作表获取表头header和二维年级成绩列表score_list接着遍历score_list根据学号“202101”开头的为一班学生“202102”开头的为二班学生“202103”开头的为三班学生按班级将学生成绩添加到二维班级成绩列表class_list中然后循环3次在循环中新建工作簿和工作表并将header、class_list中对应的元素和序号列表写入新建的工作表并命名、保存和关闭新建的工作簿最后关闭“年级排名表.xlsx”工作簿以及退出Excel程序。
【参考代码】 import xlwings #导入xlwings库
import os #导入os库
app xlwings.App(visibleFalse, add_bookFalse)#启动Excel程序
path os.chdir(初三成绩表) #设置当前工作目录
folder os.listdir(path) #获取当前工作目录下所有文件列表
book app.books.open(年级排名表.xlsx) #打开工作簿book
sheet book.sheets[初三排名表] #打开工作表sheet
header sheet.range(A1:L1).value #获取表头
#获取二维年级成绩列表score_list
score_list sheet.range(A2).expand().value
class_list [[], [], []] #定义二维班级成绩列表class_list
#遍历score_list根据学号按班级将学生成绩添加到class_list中
for score in score_list:num str(score[1])if 202101 in num:class_list[0].append(score)elif 202102 in num:class_list[1].append(score)elif 202103 in num:class_list[2].append(score)
for i in range(3): #循环3次book_new app.books.add() #新建工作簿book_new#打开默认新建的工作表sheet_newsheet_new book_new.sheets[Sheet1]#将表头写入sheet_newsheet_new.range(A1).value header#将class_list的第i个元素写入sheet_newsheet_new.range(A2).value class_list[i]num_list list(range(1, len(class_list[i]) 1))#将数据列表作为序号列写入sheet_newsheet_new.range(A2).options(transposeTrue).value num_list#定义新建的工作簿名filename 初三({})班排名表.xlsx.format(i 1)book_new.save(filename) #命名并保存book_newbook_new.close() #关闭book_new
book.close() #关闭book
app.quit() #退出Excel程序
【运行结果】 运行程序将会在“初三成绩表”文件夹中创建3个文件分别为“初三(1)班排名表.xlsx”“初三(2)班排名表.xlsx”和“初三(3)班排名表.xlsx”。其中“初三(1)班排名表.xlsx”的内容如图所示。 本任务根据出货清单模板将水果出货记录按日期分类生成多个水果出货清单。 完成本任务须首先打开“水果出货记录.xlsx”工作簿book中的“Sheet1”工作表sheet读取出货信息并保存到列表info_list中遍历info_list将信息保存到以出货日期为键其他信息的列表包括计算的金额为值的字典data中然后打开“水果出货清单.xlsx”工作簿book_day中的“模板”工作表sheet_sample遍历data的键使用copy()方法复制sheet_sample并以出货日期命名赋给sheet_new再循环将data中以出货日期为键的值写入sheet_new相应的区域最后保存并关闭book_day关闭book以及退出Excel程序。
结束语
以上就是机器学习 持续更新机器学习教程欢迎大家订阅系列专栏机器学习 你们的支持就是曼亿点创作的动力