如何用Python合并多份Excel表格并添加来源文件名列
批量合并Excel表格并添加来源文件名列
你的初始代码直接用open()读取Excel文件是行不通的——Excel属于二进制格式文件,普通文本读取方式无法解析内容。下面是用pandas实现批量合并并添加来源文件名的完整方案:
步骤1:安装依赖库
首先确保安装了处理Excel所需的库:
pip install pandas openpyxl
pandas负责数据处理与合并openpyxl用于读取和写入.xlsx格式文件(如果是.xls格式,需要额外安装xlrd)
步骤2:完整实现代码
import os import pandas as pd # 目标文件夹路径(Windows路径用原始字符串避免转义问题) file_path = r"C:\excel files" # 初始化空DataFrame存储合并后的数据 merged_data = pd.DataFrame() # 遍历文件夹中的所有文件 for filename in os.listdir(file_path): # 只处理Excel格式文件,过滤其他类型文件 if filename.endswith((".xlsx", ".xls")): # 拼接完整文件路径,避免路径错误 full_path = os.path.join(file_path, filename) # 读取Excel文件(默认读取第一个工作表,指定sheet可加sheet_name参数) df = pd.read_excel(full_path) # 新增列,填入当前文件名作为数据来源标识 df["数据来源文件"] = filename # 将当前文件数据追加到总DataFrame merged_data = pd.concat([merged_data, df], ignore_index=True) # 将合并结果保存为新Excel文件 merged_data.to_excel(r"C:\excel files\合并结果.xlsx", index=False, engine="openpyxl")
关键代码说明
os.path.join():自动拼接完整文件路径,避免手动拼接导致的跨系统路径格式问题endswith((".xlsx", ".xls")):过滤非Excel文件,防止读取无关文件报错pd.concat():实现多表格纵向合并,ignore_index=True重置合并后的索引,避免重复索引- 新增来源列:直接通过DataFrame新列赋值实现,简洁高效
额外优化建议
- 若文件夹包含子文件夹,改用
os.walk()遍历所有层级的Excel文件:for root, dirs, files in os.walk(file_path): for filename in files: if filename.endswith((".xlsx", ".xls")): full_path = os.path.join(root, filename) # 后续读取、添加列、合并逻辑同上 - 处理多工作表的Excel文件:
df_dict = pd.read_excel(full_path, sheet_name=None) for sheet_name, sheet_data in df_dict.items(): sheet_data["数据来源文件"] = f"{filename}-{sheet_name}" merged_data = pd.concat([merged_data, sheet_data], ignore_index=True) - 处理超大Excel文件时,用分块读取避免内存溢出:
chunk_iter = pd.read_excel(full_path, chunksize=10000) for chunk in chunk_iter: chunk["数据来源文件"] = filename merged_data = pd.concat([merged_data, chunk], ignore_index=True)
内容的提问来源于stack exchange,提问作者Diana Lopes
相关产品推荐
相关产品推荐

