❝今天整一个批量拆分几万行Excel表格的脚本。几万行的大表格,想按某一列拆成单独的小文件,手动筛选复制太费劲。用Python脚本,选个文件,指定拆分列,几秒钟自动拆完。免费、本地运行、不泄露数据,以后再也不用一页一页手动拆了。回复「Py脚本」获取!!!
总表长这样:

要拆成:
北京.xlsx:只放北京的数据
上海.xlsx:只放上海的数据
广州.xlsx:只放广州的数据
以此类推,几百个城市也无所谓
文件数量自动按实际城市数量生成,不用手动建。
批量处理效果:
import pandas as pdimport osimport sys# 拖入文件或输入Excel文件路径file_path = input("拖入文件或输入Excel文件路径:").strip()file_path = file_path.strip('"').strip("'")if not os.path.isfile(file_path):print(f"❌ 文件不存在:{file_path}") input("按回车键退出...") sys.exit()# 读总表df = pd.read_excel(file_path)# 显示前几行列名,方便输入print("\n文件前几行:")print(df.head())print("\n列名如下:")for i, col in enumerate(df.columns):print(f"{i+1}. {col}")# 输入要拆分的列名split_col = input("\n请输入要拆分的列名(例如:城市):").strip()if split_col not in df.columns:print(f"❌ 列名 '{split_col}' 不存在,请检查大小写或空格") input("按回车键退出...") sys.exit()# 读取所有不重复的值groups = df[split_col].dropna().unique()print(f"\n一共找到 {len(groups)} 个分组,开始拆...")# 建立文件夹保存拆出来的文件out_dir = '拆分结果'os.makedirs(out_dir, exist_ok=True)for val in groups:# 筛出当前分组的数据 df_group = df[df[split_col] == val]# 文件名处理一下非法字符 filename = str(val).replace('/', '_').replace('\\', '_').replace('*', '_').replace('?', '_').replace(':', '_') filepath = os.path.join(out_dir, f'{filename}.xlsx')# 保存 df_group.to_excel(filepath, index=False)print(f'已保存:{filepath}')print(f'\n✅ 搞定!拆出来的文件放在 "{out_dir}" 文件夹里')input("按回车键退出...")file_path = input("拖入文件或输入Excel文件路径:").strip()file_path = file_path.strip('"').strip("'")支持直接把文件拖进命令行窗口,会自动填入路径。去掉可能带有的引号。
if not os.path.isfile(file_path):print("文件不存在") sys.exit()检查文件是否存在,不存在就退出,免得后面报错。
print(df.head())print("列名:", list(df.columns))打印前几行和所有列名,方便用户确认要拆分的列叫什么。
split_col = input("请输入要拆分的列名:").strip()if split_col not in df.columns:print("列名不存在") sys.exit()输入列名,检查是否存在。
groups = df[split_col].dropna().unique()unique()拿到拆分列中所有不重复的数据(拆分依据),dropna()去掉空值,省得建个nan.xlsx出来。
filename = str(val).replace('/', '_').replace('\\', '_')...Windows文件名不能包含 \ / : * ? " < > |,这里替换掉常见的几个非法字符。
df_group.to_excel(filepath, index=False)index=False不加行号,不然Excel里多出一列“Unnamed: 0”。
input("按回车键退出...")加这行防止运行完闪退,让用户看到结果再关。
有次拆一个按“日期”列的,日期是 2026/3/10 这种,直接拿来当文件名就报错——Windows文件名不能有 /。后来加上了 replace 处理。
如果原始数据里有一些空白行,unique() 会把 NaN 也当成一个组,拆出一个全是空数据的文件。加个 dropna() 搞定。
有时候列名叫“城市 ”,后面多了个空格,直接输入“城市”会找不到。代码里加了列名列表展示,照着抄就行。
原来的代码跑完直接关窗口,用户啥也看不见。现在加了 input("按回车键退出..."),结果一目了然。
几千行数据分几十个文件,保存速度还行。但如果你有几十万行,可以换成 to_csv 更快,或者用 to_excel 时加 engine='openpyxl'。
如果原表有颜色、公式、合并单元格,pandas 保存会丢掉。这种情况得用 openpyxl 或者 xlsxwriter 手动处理,比较麻烦。多数时候只是数据,够用了。
shutil.make_archive 把文件夹打成zip,发邮件更方便# 按行数拆的示例chunk_size = 1000for i in range(0, len(df), chunk_size): chunk = df.iloc[i:i+chunk_size] chunk.to_excel(f'拆分结果/第{i//chunk_size+1}部分.xlsx', index=False)拿手头一个Excel试试,按部门、城市、月份什么的拆开看看。遇到问题直接评论区丢过来。
评论区见,点赞最高的下期就整。
回复「Py脚本」获取PDF版学习资料及各种免费脚本