第2期:45个Excel按文件名分组合并,40行Python代码搞定

这学期我带了5个班、3门课,每门课有平时、期中、期末三张成绩表——共45个文件。
学期末归档时,学校要求将每个班每门课的三个成绩表合并成一个文档。手动合并?45个文件,打开、复制、粘贴,不仅慢,更怕错行漏列。
于是我把所有文件复制到 D:\PythonTest,写了个Python程序,一键搞定。
下面分享整个过程,看看是不是也能解决你的问题。
第一步:明确需求
我们需要完成的任务:
-
将45个文件按“课程+班级”分组(例如“大数据分析-计科1班”为一组) -
每组包含3个文件:平时、期中、期末 -
将三个文件按“学号”合并成一张总评成绩表 三个文件的结构如下(仅成绩列不同): 
通过学号关联,将每个同学的三个成绩合并到一行,生成总评表。
第二步:安装必要的工具
💡 提示:这一步只需做一次。操作前确认电脑可以联网。
打开cmd(Win+R,输入cmd,回车),输入以下命令,按回车:
pip install pandas openpyxl

💡提示: 看到
“Successfully installed”= 安装成功!如果最后出现了“A new release of pip is available”提示不用理会,不影响使用。
第三步:准备好要合并的文件
在D:盘新建文件夹:PythonTest,将我们需要合并的文件复制到这里。
💡 提示:创建好的完整路径是
D:\PythonTest如果在前几期的操作中已经创建了该目录,继续使用就好。如果该文件夹下已有其他文件,请将文件暂时移动到别的地方保存。
第四步:代码实现
第1步在D:盘新建文件夹:python,该文件夹作为我们存放python脚本文件的地方。
💡 提示:如果在前几期的操作中已经创建了这个目录,继续使用就好。
第2步在 D:\python 文件夹里新建merge_excel.py文件。
💡 提示:新建文本文件,将后缀名改为
.py即可。
第3步用记事本或其他文本编辑器打开后输入或复制如下代码:
💡 代码设计思路
-
首先从 D:\PythonTest目录中获取所有Excel文件 -
将所有文件按分类名(课程+班级)分组 -
按分好的组合并文件 -
将合并好的文件输出到 D:\PythonTestOut目录下 -
提示用户看到”所有分组处理完成!”后,按回车退出程序。
import pandas as pdimport os# 指定合并文件的路径folder = r"D:\PythonTest"# 指定输出文件的路径folder_out = r"D:\PythonTestOut"# 检查输入文件夹是否存在if not os.path.exists(folder):print(f"❌ 文件夹不存在:{folder}") input("按回车退出")exit()# 创建输出文件夹(如果不存在)if not os.path.exists(folder_out): os.makedirs(folder_out)print(f"✅ 已创建输出文件夹:{folder_out}")def extract_group_key(filename):"""从文件名提取分组标识(课程+班级)""" parts = filename.split("-")if len(parts) >= 4:return"-".join(parts[:-1])return Nonedef extract_score_type(filename):"""从文件名提取成绩类型""" parts = filename.split("-")if len(parts) >= 1:return parts[-1].replace(".xlsx", "")return None# 1、从D:\PythonTest中获取所有Excel文件all_files = [f for f in os.listdir(folder) if f.endswith('.xlsx') and "总成绩" not in f]if not all_files:print("❌ 文件夹中没有Excel文件") input("按回车退出")exit()# 2.将所有文件按分类名(课程+班级)分组groups = {}for file in all_files: group_key = extract_group_key(file) score_type = extract_score_type(file)if group_key and score_type: groups.setdefault(group_key, {})[score_type] = fileelse:print(f"⚠️ 文件名格式不符:{file}")# 3.按分好的组合并文件for group_key, files_dict in groups.items():print(f"\n正在处理【{group_key}】...") required = {"平时", "期中", "期末"}if not required.issubset(files_dict.keys()):print(f" ❌ 缺少文件,跳过")continue df_dict = {}for score_type, file in files_dict.items(): try: df = pd.read_excel(os.path.join(folder, file)) score_col = df.columns[-1] df = df[["学号", "姓名", score_col]].copy() df.rename(columns={score_col: score_type}, inplace=True) df_dict[score_type] = dfprint(f" ✓ 已读取:{file},共{len(df)}人") except Exception as e:print(f" ✗ 读取失败:{file},错误:{e}")if len(df_dict) != 3:continue result = df_dict["平时"].merge(df_dict["期中"], on=["学号", "姓名"], how="outer") result = result.merge(df_dict["期末"], on=["学号", "姓名"], how="outer") result.fillna(0, inplace=True) result.insert(0, "序号", range(1, len(result) + 1)) output_path = os.path.join(folder_out, f"{group_key}-合并表.xlsx") result.to_excel(output_path, index=False)print(f" ✅ 完成!共{len(result)}人")# 4.看到"所有分组处理完成!"后,按回车退出程序。print("\n🎉 所有分组处理完成!")input("按回车退出")
💡 提示:代码输入完成后,记得 保存哦。
第4步在cmd窗口中输入以下命令,按回车:
python D:\python\merge_excel.py


💡提示: 看到输出
“🎉 所有分组处理完成!”=搞定! 按回车退出程序即可
第5步到D:盘找到文件夹D:\PythonTestOut查看合并后生成的文件。

💡提示: 此处看到的便是我们从45个文件中合并出来的15个汇总文件。
第6步 打开文件,检查结果

💡提示: 这就是我们合并后的文件效果。
至此,按文件名分组合并文件完成!
⚠️ 本文追求最小闭环极简风格
只保留核心步骤,不堆砌冗余。代码仅供学习参考,若遇问题可留言。
📌 相关推荐
-
环境准备:第0期:5分钟装好Python,后面每期复制代码就能用 -
下期预告:用Python生成唯美动图,送给你爱的人
夜雨聆风