当前位置: 首页 > news >正文

python实战一:合并多个Excel中数据

看不懂可以跟着视频学一下,关于基础课程项目也可以私聊我!

视频+源码:
链接:https://pan.quark.cn/s/2055653f735b

之前我们已经学习了如何读取和写入Execl数据,今天我们来用一个实例来进行表格的合并。如下是
2021年4个季度的销售数据明细。我们把它放在了D盘2021年销售明细的文件夹下。

每一个季度销售数据里又包含三个月的具体明细,每个月的销售记录都有1000多条,现在需要批量合
并4个工作簿,共计12张表,使用Ctrl+C、Ctrl+V功能已经不能很好的解决这里的问题,这里我们就可以用
代码解决。

上代码:

import time
from openpyxl import Workbook, load_workbook
import osdef 合并表格(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:\2021年销售明细", r"D:\2021年销售分析")print('合并完成耗时:', time.time() - 开始时间, "秒")

 运行结果:

全年销售数据为 13065 行
合并完成耗时: 6.565231084823608 秒

代码很简单,首先使用os库,循环遍历D:\2021年销售明细 目录下所有文件,然后再使用openpyxl库循环遍历单元格中的数据,并且导入,合并结果保存到【全年数据,xsx】文档下。从结果可以看出总共合并了13065行数据,只花了不到7秒钟。
我们打开看下【全年数据.xlsx】可以看到行数计数是跟代码统计的行数相吻合的。

自我演示如下:

import time  #导入 time 模块,以便使用时间相关的功能,比如测量程序运行时间。
from openpyxl import Workbook, load_workbook  #从 openpyxl 库导入 Workbook 和 load_workbook 类。这两个类用于创建和加载 Excel 工作簿。
import os  #导入 os 模块,用于处理文件和目录路径等操作。def 合并表格(file_dir, save_dir):  #定义一个名为 合并表格 的函数,它接受两个参数:file_dir(包含要合并的 Excel 文件的目录路径)和 save_dir(保存合并结果的目录路径)。files_name = os.listdir(file_dir)  #使用 os.listdir 函数列出 file_dir 目录下的所有文件和目录的名称,并将这些名称存储在 files_name 列表中。print(files_name)  #打印 files_name 列表的内容,这样你可以看到 file_dir 目录中的所有文件和目录名称。new_wb = Workbook()     #这里新建一个工作铺,相当新建一个文件夹new_ws = new_wb.active  #新建一个Excel表格header = ['销售日期', '员工工号', '销售员', '货号', '销售单号', '销量', '销售额']  #表格的头部new_ws.append(header)   #将表格的头部加入到新建的表格中去for file_name in files_name:   #利用for循环遍历将几个旧表格内容添加到新表格中if file_name.endswith('.xlsx'):  #检查文件名是否以 .xlsx 结尾,以确定它是否是一个 Excel 文件。file_path = os.path.join(file_dir, file_name)#构建 Excel 文件的完整路径,file_dir 是文件夹路径,file_name 是文件名。wb = load_workbook(file_path)#使用 openpyxl 库的 load_workbook 函数加载 Excel 文件,以便在代码中进一步处理这个工作簿。for sheet in wb.sheetnames:  #遍历工作簿中的所有工作表名称。ws = wb[sheet]  #获取当前工作表对象 ws。for row in ws.iter_rows(min_row=2, values_only=True):  #遍历当前工作表中的所有数据行,从第二行开始(跳过表头),并且只获取单元格的值,不包括单元格格式。new_ws.append(row)  #将遍历到的数据行 row 添加到新工作表 new_ws 中if not os.path.exists(save_dir):  #检查保存目录 save_dir 是否存在。如果不存在,则创建这个目录。os.makedirs(save_dir)  #创建最终保存文件的完整路径,save_dir 是保存目录,"全年数据.xlsx" 是文件名。save_path = os.path.join(save_dir, "全年数据.xlsx")  #创建最终保存文件的完整路径,save_dir 是保存目录,"全年数据.xlsx" 是文件名。new_wb.save(save_path)  #将新创建的工作簿 new_wb 保存到上述路径。if __name__ == '__main__':  #确保只有在脚本被直接运行时,才会执行以下代码块。开始时间 = time.time()  #记录脚本开始运行的时间。合并表格(r"D:\2021年销售明细", r"D:\2021年销售汇总")  #调用 合并表格 函数,传入输入和输出目录。print('合并完成耗时:', time.time() - 开始时间, "秒")  #打印合并过程的耗时。

以上是我演示有什么不懂的地方可以私信我!谢谢阅读!可以技术交流!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ios私钥证书(p12)导入失败,Windows OpenSSl 1.1.1 下载
  • iptables防火墙常用命令,运维必备
  • 【网络原理】Udp 的报文结构,保姆式教学,快速入门
  • Transformer简明笔记:文本翻译
  • 充气泵芯片|充气泵方案芯片SIC8833
  • 【专题】2024年中国游戏出海洞察报告合集PDF分享(附原数据表)
  • Redis的String和Hash
  • 网络-多路io
  • Java基于微信小程序的美食推荐小程序,附源码
  • 基于InstaSPIN-user's guide Foc电流环速度环PI参数计算过程
  • 2024年四款必备的Windows录屏工具推荐!
  • 生成对抗网络在数字病理学中的应用综述|文献精析·24-09-03
  • Docker学习之路【八】安装主从复制MYSQL8
  • 全球大脑外滩“论剑”:2024年科技人文十大热点问题揭晓
  • Vue2转Vue3学习历程
  • Angular Elements 及其运作原理
  • angular学习第一篇-----环境搭建
  • export和import的用法总结
  • GitUp, 你不可错过的秀外慧中的git工具
  • Git初体验
  • js中forEach回调同异步问题
  • Python_网络编程
  • Shadow DOM 内部构造及如何构建独立组件
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 基于HAProxy的高性能缓存服务器nuster
  • 记录一下第一次使用npm
  • 警报:线上事故之CountDownLatch的威力
  • 容器服务kubernetes弹性伸缩高级用法
  • -- 数据结构 顺序表 --Java
  • 我的业余项目总结
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • C# - 为值类型重定义相等性
  • # 透过事物看本质的能力怎么培养?
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)svelte 教程:hello world
  • (52)只出现一次的数字III
  • (zt)最盛行的警世狂言(爆笑)
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (函数)颠倒字符串顺序(C语言)
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (七)Knockout 创建自定义绑定
  • (七)理解angular中的module和injector,即依赖注入
  • (四)库存超卖案例实战——优化redis分布式锁
  • .cn根服务器被攻击之后
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET gRPC 和RESTful简单对比
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET轻量级ORM组件Dapper葵花宝典