【脚本系列】如何使用 Python 脚本对同一文件夹中表头相同的 Excel 文件进行合并

目录

  • [🧰 准备工作](#🧰 准备工作)
    • [🐍 安装所需环境](#🐍 安装所需环境)
  • [📁 脚本说明](#📁 脚本说明)
    • [一、核心 Python 脚本:`merge_excel.py`](#一、核心 Python 脚本:merge_excel.py)
      • [✅ 脚本代码:](#✅ 脚本代码:)
  • [⚠️ 使用说明 & 注意事项](#⚠️ 使用说明 & 注意事项)
  • [💡 配套 shell 脚本:`merge_excel.zsh`](#💡 配套 shell 脚本:merge_excel.zsh)
  • [✅ 效果演示](#✅ 效果演示)
  • [📌 小结](#📌 小结)

在日常工作或数据处理场景中,我们经常会遇到这样一种需求:将一个文件夹中多个结构一致(表头相同)的 Excel 文件合并成一个总表,以便于后续的数据分析或汇总处理。

本篇文章将手把手带你使用 Python 实现这一任务。你将学会以下内容:

  • 扫描指定目录下所有合法 Excel 文件
  • 读取多个 Excel 文件为 DataFrame
  • 合并成一个总表并保存
  • 配套 shell 脚本实现一键执行

🧰 准备工作

🐍 安装所需环境

使用 pandas 和 openpyxl,如果你尚未安装,请先运行以下命令:

bash 复制代码
pip install pandas openpyxl xlrd

📁 脚本说明

一、核心 Python 脚本:merge_excel.py

这是我们本次任务的核心脚本,功能是:

从指定文件夹中读取所有 .xlsx 或 .xls 文件(排除临时文件),合并后保存为 merged_result.xlsx。

✅ 脚本代码:

python 复制代码
import pandas as pd
import os
import warnings

# 忽略一些可能出现但不影响程序运行的警告
warnings.simplefilter("ignore", UserWarning)

# 设置需要合并的 Excel 文件所在的文件夹路径
folder_path = '/你的文件夹路径/'

# 筛选 Excel 文件,排除以 ~ 或 .~ 开头的临时文件
excel_files = [f for f in os.listdir(folder_path)
               if f.endswith(('.xlsx', '.xls')) and not f.startswith('~') and not f.startswith('.~')]

if not excel_files:
    print("❌ 没有找到有效的 Excel 文件")
    input("按回车键退出...")
    exit()

data_frames = []

for file in excel_files:
    file_path = os.path.join(folder_path, file)
    try:
        if file.endswith('.xlsx'):
            df = pd.read_excel(file_path, engine='openpyxl')
        elif file.endswith('.xls'):
            df = pd.read_excel(file_path, engine='xlrd')
        else:
            print(f"⚠️ 跳过不支持的文件:{file}")
            continue
        data_frames.append(df)
        print(f"✅ 读取成功:{file}")
    except Exception as e:
        print(f"❌ 读取失败:{file},错误:{e}")

# 合并所有 DataFrame 并输出
if data_frames:
    combined_df = pd.concat(data_frames, ignore_index=True)
    output_path = os.path.join(folder_path, 'merged_result.xlsx')
    combined_df.to_excel(output_path, index=False)
    print("\n✅ 合并完成,文件保存在:", output_path)
else:
    print("\n❗未成功读取任何表格")

input("\n按回车键退出...")

⚠️ 使用说明 & 注意事项

  • 所有文件 必须有相同的表头结构(字段顺序和名称)。
  • 支持 .xlsx 和 .xls 两种常见 Excel 格式。
  • 会自动忽略临时文件(如以 ~ 或 .~ 开头的缓存文件)。
  • 合并后结果保存在当前目录下的 merged_result.xlsx 文件中。

💡 配套 shell 脚本:merge_excel.zsh

为了简化执行过程,我们可以添加一个 shell 脚本,做到 双击或一键执行合并任务。

zsh 复制代码
#!/bin/zsh

# 自动跳转到当前脚本所在目录
cd "$(dirname "$0")"

# 执行 Python 脚本
python3 merge_excel.py

步骤:

  1. 将 merge_excel.py 和 merge_excel.zsh 放在同一目录下。

  2. 终端执行一次:

    bash 复制代码
    chmod +x merge_excel.zsh
  3. 之后双击或运行:

    bash 复制代码
    ./merge_excel.zsh

✅ 效果演示

在你运行脚本后,控制台会逐个显示哪些文件读取成功,哪些文件出现问题,并最终提示:

复制代码
✅ 合并完成,文件保存在:/xxx/merged_result.xlsx

按回车键退出...

你可以直接打开该文件进行数据核查或分析。


📌 小结

通过这篇教程,我们实现了一个 可复用、可扩展 的 Excel 合并脚本,并学会了:

  • 如何读取多个 Excel 文件
  • 如何处理不同扩展名和引擎
  • 如何过滤临时文件
  • 如何生成合并结果文件
  • 如何用 shell 脚本简化执行
相关推荐
知识分享小能手10 分钟前
C++ 学习教程,从入门到精通,C++ 友元、异常和其他特性 — 详细知识点(15)
开发语言·c++·学习
ebiobiz37 分钟前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
朝朝辞暮i38 分钟前
C++ 第 26 课:对象、指针与 ->
java·开发语言·c++
慢云智慧空间1 小时前
从智能终端到空间AI,慢云科技如何重新定义智慧建筑的核心能力?
人工智能·python·科技
2601_962885721 小时前
如何用 Python 做股价历史分位选股?(筛出处于历史低位的股票)
开发语言·python
倔强的石头1061 小时前
【Linux指南】动静态库系列(十一):PLT 与延迟绑定:第一次调用动态库函数时发生了什么
linux·人工智能·python
梦帮科技1 小时前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm
殷色玫瑰2 小时前
C++入门基础复习:从命名空间到引用与nullptr,一篇重新捡回C++基础
java·开发语言·c++
(Charon)2 小时前
【C++面试】手写线程池:任务队列、工作线程与优雅退出
开发语言·c++
言乐62 小时前
Python概括后端原理
开发语言·python·django·virtualenv·pygame