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.xdnf.cn/news/1545298.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

下水道内缺陷识别检测数据集 yolo数据集 共2300张

下水道内缺陷识别检测数据集 yolo数据集 共2300张 下水道内部缺陷识别数据集(Sewer Interior Defect Recognition Dataset, SIDRD) 摘要 SIDRD 是一个专门针对下水道内部缺陷识别的数据集,旨在为城市基础设施维护和管理提供一个标准化的训练…

Qt:关于16进制数转化那些事

前言 由于当时做UDP通信的时候使用16进制数与QString的相互转换,但是当时我所要求的转换不仅仅是转化过去就行了,我还有字节数要求,就是这个16进制数占据多少位那么转化后的数据就该占据多大的空间。 正文 1 将 QString 转换为16进制字符串…

【Redis入门到精通五】Java如何像使用MySQL一样使用Redis(jedis安装及使用)

目录 Jedis 1.jedis是什么 2.jedis的安装配置 3.jedis的基础命令操作展示 1.set和get操作: 2.exists和del操作: 3.keys和type操作: 4. expire和ttl: Jedis Java 操作 redis 的客⼾端有很多,其中最知名的是 jedi…

STM32基础学习笔记-Timer定时器面试基础题5

第五章、TIMER 常见问题 1、基本概念:什么是定时器 ?作用 ?分类 ? 2、时基单元 ?组成 ?计数模式 ?溢出条件 ? 溢出时间计算 ? 3、systick原理 ?代码讲解 &…

中国蚁剑(antSword)安装使用

antSword下载 antSword-Loader下载 作者:程序那点事儿 日期:2024/09/12 19:35 中国蚁剑(AntSword)是一款跨平台的开源网站管理工具,旨在满足渗透测试人员的需求。它是一个功能强大的工具,可以帮助用户管理…

基于CPS CPSQ5453CPSQ5352的易冲车灯方案

一、方案描述 CPS易冲(CONVENIENTPOWER)针对汽车矩阵大灯,推出 基于CPS CPSQ5453 & CPSQ5352的汽车矩阵式大灯方案。 开发板搭载的主要器件有CPS的独立双通道恒压恒流升压控制器:CPSQ5453、独立双通道LED恒流降压变换器&#…

心觉:如何重塑高效学习的潜意识(1)两种方法的优缺点

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作180/1000天 你的学习习惯是什么呢 学习的时候是感到轻松吗 很多人感觉现在是知识大爆炸的时代,每天都会产生海量的知…

第 1 章:Vue 核心

1. Vue 简介 1.1. 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/:中文官网里面【教程】和【API】是比较重要的。用到api就去查询,实践当中记忆更牢靠。 风格指南:官方推荐写的一个代码风格cookbook:编写v…

【Python报错已解决】SyntaxError: invalid syntax

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25 1. PromSec: Prompt Optimization for Secure Generation of Functional Source Code with Large Language Models (LLMs) M Nazzal, I Khalil, A Khreishah, NH Phan - arXiv preprint arXiv:2409.12699, 2…

车辆识别数据集,图片数量20500,模型已训练200轮

车辆识别数据集(Vehicle Recognition Dataset, VDRD) 摘要 VDRD 是一个专为车辆识别设计的大规模数据集,它包含了20500张不同类型的汽车、货车、公交车以及其他类型车辆的图像。数据集提供了四种车辆类别:汽车、货车、其他车辆和…

网页爬虫法律与道德:探索法律边界与道德规范

目录 引言 一、网络爬虫技术概述 1.1 定义与功能 1.2 技术原理 1.3 案例分析 二、网络爬虫的法律边界 2.1 合法性要求 2.2 刑事风险 2.3 案例分析 三、网络爬虫的道德规范 3.1 尊重版权和隐私 3.2 合理使用爬虫技术 3.3 透明度和社会责任 四、技术挑战与应对策略…

支付宝沙箱环境 支付

一 什么是沙箱: 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境 支付宝正式和沙箱环境的区别 : AI: 从沙箱到正式环境: 当应用程序开发完成后,需要将应用程序从沙箱环境迁移到正式环境。 这通常涉及…

RabbitMQ——消息的可靠性处理

1.业务分析 在业务的开发中,我们通常将业务的非核心业务交给MQ来处理,比如支付,在支付过后,我们需要扣减余额,修改支付单状态,修改订单状态,发送短信提醒用户,给用户增加积分等等&am…

C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(2)

2.2、用析构函数释放内存 每当完成动态分配内存时,都应该释放。如果在一个对象中动态分配内存,释放内存的地方就是析构函数。编译器保证当对象被破坏时会调用析构函数。下面就是Spreadsheet类定义中的析构函数: export class Spreadsheet { …

el-form 表单一个 el-form-item 包含多个 el-input 时的校验方法

效果如图&#xff1a; 方法&#xff1a; 在el-form-item上添加required&#xff0c;里面再放一层el-form-item&#xff0c;设置prop&#xff0c;在rules填校验规则 代码实例如下&#xff1a; <template><div><el-form :rules"rules" :model"ru…

关于QSizeGrip在ui界面存在布局的情况下的不显示问题

直接重写resizeEvent你会发现&#xff1a;grip并没有显示 void XXXXX::resizeEvent(QResizeEvent *event) {QWidget::resizeEvent(event);this->m_sizeGrip->move(this->width() - this->m_sizeGrip->width() - 3,this->height() - this->m_sizeGrip->…

七段 LED 显示器(7段数码管)

7 段 LED 显示器, 通常简称为 LED 数码管 或 数码管. 通过 菜单--绘制--数字芯片--添加 7 段 LED 显示器 可以引入它. 普通模式 它内部其实就是七盏长条状的 LED 灯, 有的横着放, 有的竖着放. 七个灯用 a b c d e f g 分别表示. 灯的位置从上到下, 从里到外顺时针下来, 如上图…

鸿蒙开发(NEXT/API 12)【基础功能(Function Flow编程模型)】任务并发调度

简介 FFRT: Function Flow Runtime&#xff0c; 一种并发编程框架&#xff0c;提供以数据依赖的方式构建异步并发任务的能力&#xff1b;包括数据依赖管理、任务执行器、系统事件处理等。并采用基于协程的任务执行方式&#xff0c;可以提高任务并行度、提升线程利用率、降低系…

工业数据采集系统

一、网页部分代码 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…