乐于分享
好东西不私藏

一个脚本解决一个问题 | 200个Excel文件合并,Python 8行搞定

一个脚本解决一个问题 | 200个Excel文件合并,Python 8行搞定

正文

上周有个做供应链的朋友找我,说他每个月要从系统里导出200多个门店的销售数据,全是Excel文件,然后手动一个个打开复制粘贴到汇总表里。

每个月花多长时间?他说快的时候两个小时,慢的时候(文件格式出问题)能搞一下午。

我说你发我一个文件夹我看看。看完之后我跟他说,你等我五分钟。

五分钟后我发了他一段代码,8行。

他跑完之后沉默了大概十秒钟,回了一句:"我之前那两年真是纯牛马。"


场景

你的情况大概是这样的:

  • 一个文件夹里有几十甚至几百个Excel文件(.xlsx或.csv)

  • 每个文件的结构一样(列名相同,只是数据不同)

  • 你需要把它们全部合并成一个大表

如果你的文件长这样:

📁 月度数据/
├── 门店001_3月.xlsx
├── 门店002_3月.xlsx
├── 门店003_3月.xlsx
├── ... (200个)

每个文件里面大概是:

门店名日期销售额订单数
门店0012026-03-011258043
门店0012026-03-02987031

你要把200个这样的文件合成一张大表。


代码

importpandasaspd
frompathlibimportPath

folder = Path("月度数据")  # 改成你的文件夹路径
files = list(folder.glob("*.xlsx"))  # 如果是csv就改成 *.csv

df = pd.concat([pd.read_excel(fforfinfiles], ignore_index=True)
df.to_excel("汇总结果.xlsx"index=False)

print(f"搞定,合并了{len(files)}个文件,共{len(df)}行")

没了,就这些。


怎么用

第一步:装Python和pandas

如果你电脑上还没有Python,去 python.org 下载安装,记得勾选"Add to PATH"。装完之后打开命令行(Win键+R,输入cmd),输入:


pip install pandas openpyxl

等它跑完就行。

第二步:把代码保存成文件

打开记事本,把上面那段代码粘贴进去,保存为 merge.py。放在哪都行,但要记住路径。

第三步:改一个地方

把代码里的 "月度数据" 改成你实际的文件夹路径。比如你的文件夹在桌面上叫"3月数据",就改成:


folder = Path(r"C:\Users\你的用户名\Desktop\3月数据")

注意路径前面有个 r,别漏了。

第四步:跑

命令行里输入:


python merge.py

然后你会看到类似这样的输出:


搞定,合并了200个文件,共15832行

汇总结果就在跟merge.py同一个目录下。


几个你可能会遇到的情况

文件里有的是csv有的是xlsx怎么办?

改一下读取那行:


defread_file(f):
iff.suffix == '.csv':
returnpd.read_csv(f)
returnpd.read_excel(f)

df = pd.concat([read_file(fforfinfiles], ignore_index=True)

有些文件第一行不是表头,有空行怎么办?

说实话这种情况比较烦,得具体问题具体处理。最常见的是前几行是标题或者说明文字,实际数据从第3行或第4行开始。加一个 header 参数:


pd.read_excel(fheader=2)  # 从第3行开始读(0开始计数)

合并完想按某列排序呢?


df = df.sort_values("日期")  # 改成你想排序的列名

文件太多,怕出错想看进度?


forifinenumerate(files):
print(f"正在处理 {i+1}/{len(files)}: {f.name}")

最后说两句

这个脚本我自己工作中用了不知道多少次了,后来加了各种参数搞了个通用版本。但核心就是最开始那8行。

你不需要理解每一行是什么意思(虽然想了解的话评论区可以问),你只需要知道:改文件夹路径 → 运行 → 拿到结果。

两个小时的重复劳动变成几秒钟,这就是Python对非程序员最大的价值——不是让你当程序员,是把你从重复劳动里解放出来。

下期预告:批量重命名文件——"把200个文件从'IMG_20260301_001.jpg'改成'3月活动照片_001.jpg'"。


我是鲁叶的Python,一个写了十年代码的老工人。这个系列会持续更新,每篇解决一个具体的、真实的、非程序员也能用的小问题。