正文
上周有个做供应链的朋友找我,说他每个月要从系统里导出200多个门店的销售数据,全是Excel文件,然后手动一个个打开复制粘贴到汇总表里。
每个月花多长时间?他说快的时候两个小时,慢的时候(文件格式出问题)能搞一下午。
我说你发我一个文件夹我看看。看完之后我跟他说,你等我五分钟。
五分钟后我发了他一段代码,8行。
他跑完之后沉默了大概十秒钟,回了一句:"我之前那两年真是纯牛马。"
场景
你的情况大概是这样的:
一个文件夹里有几十甚至几百个Excel文件(.xlsx或.csv)
每个文件的结构一样(列名相同,只是数据不同)
你需要把它们全部合并成一个大表
如果你的文件长这样:
📁 月度数据/
├── 门店001_3月.xlsx
├── 门店002_3月.xlsx
├── 门店003_3月.xlsx
├── ... (200个)
每个文件里面大概是:
| 门店名 | 日期 | 销售额 | 订单数 |
|---|---|---|---|
| 门店001 | 2026-03-01 | 12580 | 43 |
| 门店001 | 2026-03-02 | 9870 | 31 |
你要把200个这样的文件合成一张大表。
代码
importpandasaspd
frompathlibimportPath
folder = Path("月度数据") # 改成你的文件夹路径
files = list(folder.glob("*.xlsx")) # 如果是csv就改成 *.csv
df = pd.concat([pd.read_excel(f) forfinfiles], 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(f) forfinfiles], ignore_index=True)
有些文件第一行不是表头,有空行怎么办?
说实话这种情况比较烦,得具体问题具体处理。最常见的是前几行是标题或者说明文字,实际数据从第3行或第4行开始。加一个 header 参数:
pd.read_excel(f, header=2) # 从第3行开始读(0开始计数)
合并完想按某列排序呢?
df = df.sort_values("日期") # 改成你想排序的列名
文件太多,怕出错想看进度?
fori, finenumerate(files):
print(f"正在处理 {i+1}/{len(files)}: {f.name}")
最后说两句
这个脚本我自己工作中用了不知道多少次了,后来加了各种参数搞了个通用版本。但核心就是最开始那8行。
你不需要理解每一行是什么意思(虽然想了解的话评论区可以问),你只需要知道:改文件夹路径 → 运行 → 拿到结果。
两个小时的重复劳动变成几秒钟,这就是Python对非程序员最大的价值——不是让你当程序员,是把你从重复劳动里解放出来。
下期预告:批量重命名文件——"把200个文件从'IMG_20260301_001.jpg'改成'3月活动照片_001.jpg'"。
我是鲁叶的Python,一个写了十年代码的老工人。这个系列会持续更新,每篇解决一个具体的、真实的、非程序员也能用的小问题。
夜雨聆风