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

Python批量合并365个工作表的2种方法

一、引言

小明刚进入到新公司,就被委以重任:将365个Excel文件中的英文表头修改为中文。传统方法是逐一打开每个文件,手动修改标题,然后保存,最后再合并。这种方法不仅耗时耗力,还容易出错。如果用Python就可以实现批量修改表头,并快速合并,就可以大大地提速,这样原本可能需要2天的工作量,可能只需要1分钟就完成了。那么用Python又是如何实现的呢?

二、实现代码

1. 使用pandas来合并

如果使用Python中的pandas的话,根据他的需求可以分为3步:

第一步:读取所有xlsx文件,这时我们使用的是os模块,利用os模块批量获取xlsx格式文件,由于有时还会有~.xlsx这种文件,干扰python读取文件,所以要排除一下。

第二步:利用pandas模块建立一个DataFrame,设定好表头columns,后面合并xlsx时就不用读取第一行表头,直接进行合并了。

第三步:利用for循环,拼接路径地址,逐个读取xlsx文件,修改表头后,再利用pandas中的concat来合并xlsx文件,合完成后输出保存。

通过以上三步,就可以将 365 个xlsx文件合并成一个,合并后的excel表头按要求的中文来。只需编写10多行代码,他就可以在 2秒内完成这项工作,而不是花费24小时。

import os
import pandas as pd
import timet1 = time.time() #定义时间
# 定义文件夹路径
folder_path = "./files/"# 获取文件夹中所有Excel文件的文件名
file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")]# 初始化一个空的DataFrame,用于存放合并后的数据
combined_df = pd.DataFrame(columns=['标题', '日期', '检查结果', '核检员'])# 遍历所有Excel文件,并将它们合并到一个DataFrame中
for file_name in file_list:file_path = os.path.join(folder_path, file_name)df = pd.read_excel(file_path)# 将列名改为所需的表头df.columns = ['标题', '日期', '检查结果', '核检员']# 将当前文件的内容追加到合并的DataFrame中combined_df = pd.concat([combined_df, df], ignore_index=True)# 保存合并后的数据到一个新的Excel文件
output_file = "combined_quality_report.xlsx"
combined_df.to_excel(output_file, index=False)print(f"所有文件已成功合并,并保存为 {output_file},\n耗时:{round(time.time()-t1, 1)}秒")

2.使用openpyxl来合并

由于pandas在打包时不太方便,因此为了跨平台操作,我们可以把它改为openpyxl,当然我们可以不用手工去改,只把上面这些代码放到ChatGPT中,给出指令就可以了。

ChatGPT辅助代码转写

在使用openpyxl时,我们修改代码的逻辑,直接从第二行来读取,简化读取步骤,而不用更新读取excel的表头了,这样可以保证其生成的速度还可以提高不少。步骤如下:

第一步,使用 openpyxl 创建一个新的工作簿。

第二步,读取每个文件的内容并跳过表头,只合并数据行。

第三步,最后将合并的数据保存到一个新的Excel文件中。

实现的代码如下:

import os
import time
from openpyxl import Workbook,load_workbook# 定义时间
t1 = time.time()# 定义文件夹路径
folder_path = "./files/"# 获取文件夹中所有Excel文件的文件名
file_list = [f for f in os.listdir(folder_path) if f.endswith('.xlsx') and not f.startswith("~")]# 创建一个新的工作簿和活动工作表
combined_wb = Workbook()
combined_ws = combined_wb.active# 添加表头
headers = ['标题', '日期', '检查结果', '核检员']
combined_ws.append(headers)# 遍历所有Excel文件,并将它们合并到新的工作表中
for file_name in file_list:file_path = os.path.join(folder_path, file_name)wb = load_workbook(file_path)ws = wb.active# 跳过表头,从第二行开始读取数据for row in ws.iter_rows(min_row=2, values_only=True):combined_ws.append(row)  # 将每一行数据添加到合并的工作表中# 保存合并后的数据到一个新的Excel文件
output_file = "combined_quality_report.xlsx"
combined_wb.save(output_file)print(f"所有文件已成功合并,并保存为 {output_file},\n耗时:{round(time.time() - t1, 1)}秒")

三、学后总结

在数字化办公时代,掌握编程和自动化技能对提升工作效率至关重要。Python作为一种易学且功能强大的编程语言,在处理重复性工作时展现出巨大潜力。如果你也想摆脱繁重的重复劳动,不妨尝试学习Python编程,让你的办公效率直线上升。


http://www.mrgr.cn/news/35618.html

相关文章:

  • Qt-DateEditTimeEdit输入类控件(33)
  • 【AIGC】ChatGPT提示词解析:如何生成爆款标题、节日热点文案与完美文字排版
  • Chunk-based Chinese Spelling Check with Global Optimization(EMNLP2020)
  • Doris之使用优化
  • 一天认识一个硬件之测线器
  • Redis实战--Redis的数据持久化与搭建Redis主从复制模式和搭建Redis的哨兵模式
  • 前端框架对比与选择指南:React.js、Angular、Vue.js及其他
  • 【JS】Reflect
  • Java后端开发中的RESTful API版本控制策略
  • uniapp js向json中增加另一个json的全部数据,并获取json长度
  • Elasticsearch7.7修改network.host IP地址 start启动失败及Elasticsearch7的配置项详解
  • 栈的深度解析:顺序栈与链栈的实现
  • Oracle逻辑备份脚本【生产环境适用】
  • 苏轼为何要写石钟山记?时间节点是关键
  • 问:Java线程为不直接run(),而是要先Start()?
  • service 命令:管理系统服务
  • 数据结构 ——— 数组 nums 包含了从 0 到 n 的所有整数,但是其中缺失了一个,请编写代码找出缺失的整数,并且在O(N)时间内完成
  • 【C++前缀和 状态压缩】1177. 构建回文串检测|1848
  • 车辆识别数据集,图片数量20500,模型已训练200轮
  • C语言 | Leetcode C语言题解之第435题无重叠区间