获取每个 Excel 文件第三行的唯一标识。
如果“第三行”判断只是看整行是否完全相同,可以把这一整行的内容当作一个“key”;
如果只看第三行某个单元格(例如第三行第一列的值),就把那个单元格作为“key”。
建立一个 字典 (dict),使用上面得到的第三行内容作为字典的键(key),对应一个装载该类 Excel 内容的列表。
根据字典键分组,将相同 key 的数据合并,最后输出到对应的 Excel 文件中。
下面我们使用 Pandas 库来做一个示例。如果你需要基于 openpyxl 或其他库进行读写,也可做相应的修改。
- import os
- import pandas as pd
- def merge_excels_by_third_row(folder_path, output_prefix="merged"):
- """
- 从指定文件夹中,读取多个 Excel 文件,
- 按第三行的值进行分类并合并,
- 最终输出若干个合并后的 Excel 文件。
- :param folder_path: 存储 Excel 文件的文件夹路径
- :param output_prefix: 输出文件的前缀名称
- """
- # 1. 找到所有 Excel 文件
- excel_files = [f for f in os.listdir(folder_path)
- if f.endswith('.xlsx') or f.endswith('.xls')]
- # 用于存放分组后的 DataFrame 列表
- grouped_data = {}
- for file_name in excel_files:
- file_path = os.path.join(folder_path, file_name)
- # 2. 读取该 Excel 文件(只读取第一张表为示例,header=None 表示不使用任何行为表头)
- df = pd.read_excel(file_path, sheet_name=0, header=None)
- # 3. 获取第三行内容作为分组标识
- # 假设仅根据第三行第一列进行分组
- # 如果要基于整行来分组,也可以将整行转换成元组或字符串
- third_row_value = df.iloc[2, 0] # 第三行(索引2),第一列(索引0)
- # 如果要把第三行整体作为key:
- # third_row_tuple = tuple(df.iloc[2, :].astype(str).tolist())
- # 4. 放入分组
- if third_row_value not in grouped_data:
- grouped_data[third_row_value] = []
- grouped_data[third_row_value].append(df)
- # 5. 对相同 key 下的数据进行合并,并写回到 Excel
- # 这里采用行方向简单拼接 (pd.concat),忽略原来的行索引
- for key, dfs in grouped_data.items():
- # 将所有 DF 拼成一个
- combined_df = pd.concat(dfs, ignore_index=True)
- # 生成输出文件名,比如 merged_第三行值.xlsx
- output_file_name = f"{output_prefix}_{key}.xlsx"
- output_file_path = os.path.join(folder_path, output_file_name)
- combined_df.to_excel(output_file_path, index=False, header=False)
- print(f"已输出文件:{output_file_path}")
- if __name__ == "__main__":
- # 替换成自己存放 Excel 文件的路径
- folder_path = r"D:\temp\excel_folder"
- merge_excels_by_third_row(folder_path)
说明
header=None
当我们不确定 Excel 的第一行是否适合作为字段名时,可以先全部读进来;这样 Pandas 默认会给列加上数值索引(0,1,2...)。
如果你的 Excel 文件有表头,你可以根据需求调整 header 参数的值,或者在后续对 DataFrame 进行处理、重新设置表头。
df.iloc[2, 0]
iloc[2, 0] 表示读取第三行(索引2)、第一列(索引0)的值。
如果想对第三行所有列进行对比,可以使用 df.iloc[2, :] 获取整行数据,并将它转为元组或字符串用作分组键。
grouped_data 字典
字典的键(key)就是第三行的内容,值(value)是一个列表,列表里存放相同键对应的多个 DataFrame。
合并操作
这里使用 pd.concat(dfs, ignore_index=True) 对同一个键下的 DataFrame 进行 行方向的拼接(即把一个表紧接在另一个表的后面)。如果你的需求是想做列拼接或更复杂的合并方式,可以参考 pandas.merge 或设置 axis 参数等。
输出文件命名
输出文件名中加入了第三行内容作为标识。
如果第三行的内容存在特殊字符或者过长,不适合做文件名,你可以做一些格式化处理,比如去掉特殊字符或者只取前面一部分作为文件名后缀等。
这样就可以实现:当多个 Excel 文件第三行内容相同时合并到一个新文件;如果第三行内容不一致,则自动分到不同的输出文件。


雷达卡


京公网安备 11010802022788号







