当前位置:首页>python>简单粗暴——Python20行代码教你如何实现Excel智能分组合并,从此告别机械复制

简单粗暴——Python20行代码教你如何实现Excel智能分组合并,从此告别机械复制

  • 2026-10-11 08:12:13
简单粗暴——Python20行代码教你如何实现Excel智能分组合并,从此告别机械复制
你是否也遇到过这样的场景:有一份Excel工作簿,里面有若干张工作表,每张工作表某一列保存着许多数据,需要按固定数量对这列数据按指定分隔符进行合并。
手动来完成的话,效率不仅低下,还很容易出现错误,甚至造成不必要的麻烦。今天就分享一段极简的Python代码,教你如何自动识别工作表名称,工作表名称中的数字,一键实现指定数量单元格的合并。
下面是完成的代码展示
import pandas as pdimport repath = r"E:\序列号.xlsx"dfs = pd.read_excel(path,sheet_name=None,header=None)for sht,df in dfs.items():    if m:= re.match(r"\d+",sht):        num = int(m.group())        data_list = df.iloc[:,0].dropna().astype(str).tolist()        if not data_list:            print(f"工作表{sht}无数据,已跳过")            continue        result = []        for i in range(0,len(data_list),num):            group = data_list[i:i+num]            merged = " ".join(group)            result.append(merged)        output_path = rf"E:\序列号_{num}.xlsx"        output_xlsx = pd.DataFrame({'结果':result})        output_xlsx.to_excel(output_path,index=False)
一键运行,结果如下图所示:
这段代码运行逻辑是这样的:
  • 动态加载所有工作表:一次性读取Excel文件中所有的工作表。
  • 智能分析工作表名称:利用正则表达式提取工作表名称中的数字,将提取到的数字作为需要合并单元格的数量,若单元格数量为空,则自动跳过。
  • 批量提取指定数量单元格并写入列表:依次提取指定数量的单元格,合并后写入新的列表。
  • 批量输出:处理完成后,指明合并的固定数量,最后自动保存为新的Excel文件。
代码逐步解析:

1、读取所有Excel工作表

dfs = pd.read_excel(path,sheet_name=None,header=None)
  • path:为读取Excel文件的路径。
  • sheet_name=None:当值为None时,表示读取所有工作表。pandas会返回一个字典,键是工作表名,值是DataFrame数据。
  • header=None:表示不将第一列作为列名。

2、提取所有工作表名称中的数字

for sht,df in dfs.items():    if m:= re.match(r"\d+",sht):        num = int(m.group())
  • r"\d+":表示匹配所有数字。\d可以匹配0-9中任意一个数字,+表示一个或多个。
  • re.match:表示从工作表名称开头开始匹配。如果数字在中间,可以修改为re.search。
  • int(m.group()):m.group()为匹配的结果,再使用int()将其转换为数值类型。

3、提取第一列数据并清洗

data_list = df.iloc[:,0].dropna().astype(str).tolist()
  • df.iloc[:,0]:表示第一列数据,索引从0开始。
  • .dropna():表示删除空值,排除干扰。
  • .astype(str):转换为字符串,防止数字被误处理。
  • .tolist():转换为列表。

4、按指定大小分组合并

        result = []        for i in range(0,len(data_list),num):            group = data_list[i:i+num]            merged = " ".join(group)            result.append(merged)
  • range(0,len(data_list),num):表示从0开始,到len(data_list)结束(不包含),步长为num。在这里,使用range函数可以实现每次跳跃num个数据,配合列表切片data_list[i:i+num]可以轻松实现分组数据的打包。
  • merged =" ".join(group):把分组数据按指定要求的分隔符进行合并,这里使用的分隔符为空格。
  • result.append(merged):添加到result列表。

5、保存为新的Excel文件

        output_path = rf"E:\序列号_{num}.xlsx"        output_xlsx = pd.DataFrame({'结果':result})        output_xlsx.to_excel(output_path,index=False)
  • 将按固定长度生成的数据保存为单独的工作表,工作表名称包含固定分组的数字,方便查找核对和使用。
这段代码可以将一列数据按固定长度进行分行展示,适合任何需要将固定多行转为一行的批量处理任务,可以实现用最少的代码,解决最繁琐的重复劳动。
以后遇到类似的合并需求,只需要修改文件路径和分组规则,几秒钟就能搞定。如果你觉得今天的分享对你有所帮助,欢迎收藏+点赞+转发!

最新文章

随机文章