最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)一鍵合并多文件夾下百份Excel自動匯總至總表

 更新時間:2026年06月23日 08:23:47   作者:小莊-Python辦公  
本文介紹了一個使用Python自動合并多文件夾下Excel文件的解決方案,通過30行代碼即可實現(xiàn)遞歸遍歷目錄、讀取Excel數(shù)據(jù)并合并為總表的功能,大幅提升辦公效率,希望對大家有所幫助

場景引入

每月底,財務(wù)部門的同事小張總會遇到這樣的噩夢:公司下屬 12 個分公司各自把報表放在不同的文件夾里,每個文件夾又有 5-10 份 Excel 文件,格式基本一致但文件名五花八門。小張需要手動打開每一份文件,復(fù)制粘貼到匯總表里——每次都要花掉整整半天時間。

學(xué)完本節(jié),你可以用 不到 30 行 Python 代碼,一鍵遍歷所有文件夾、讀取所有 Excel 文件,自動合并成一張總表,全程只需 3 秒鐘。

技術(shù)原理

核心思路分三步:

  1. 遍歷目錄樹:使用 Python 內(nèi)置的 os.walk()pathlib 遞歸掃描所有子文件夾
  2. 讀取 Excel 文件:使用 pandas.read_excel() 將每個 Excel 文件讀取為 DataFrame
  3. 縱向拼接:使用 pandas.concat() 將多個 DataFrame 按行合并,最后導(dǎo)出為新的 Excel 文件

文件夾結(jié)構(gòu)示意:
數(shù)據(jù)源/
├── 北京分公司/
│   ├── 1月報表.xlsx
│   └── 2月報表.xlsx
├── 上海分公司/
│   ├── Q1匯總.xlsx
│   └── Q2匯總.xlsx
└── 廣州分公司/
    └── 年度報表.xlsx
         ↓ Python 自動遍歷 + 合并
    ↓
總表.xlsx(包含所有數(shù)據(jù))

環(huán)境準備

安裝依賴庫

pip install pandas openpyxl
庫名作用
pandas數(shù)據(jù)處理核心,提供 DataFrame 結(jié)構(gòu)和 concat 合并功能
openpyxlpandas 讀取 .xlsx 文件的引擎(必須安裝)

完整代碼

import os
import pandas as pd
from pathlib import Path

def merge_excel_files(source_dir, output_file="總表匯總.xlsx"):
    """
    遍歷指定目錄下所有子文件夾中的 Excel 文件,合并為一張總表

    參數(shù):
        source_dir: 包含 Excel 文件的根目錄路徑
        output_file: 輸出匯總文件的文件名
    """
    all_dataframes = []  # 存儲所有讀取到的 DataFrame
    file_count = 0       # 統(tǒng)計處理的文件數(shù)

    # 將路徑轉(zhuǎn)為 Path 對象,方便操作
    root_path = Path(source_dir)

    if not root_path.exists():
        print(f"錯誤:目錄 {source_dir} 不存在!")
        return

    # os.walk 遞歸遍歷所有子文件夾
    for dirpath, dirnames, filenames in os.walk(source_dir):
        for filename in filenames:
            # 只處理 .xlsx 和 .xls 文件
            if filename.endswith(('.xlsx', '.xls')) and not filename.startswith('~$'):
                file_path = os.path.join(dirpath, filename)
                file_count += 1

                try:
                    # 讀取 Excel 文件(默認讀取第一個 sheet)
                    df = pd.read_excel(file_path, engine='openpyxl' if filename.endswith('.xlsx') else 'xlrd')

                    # 可選:添加一列來源信息,記錄數(shù)據(jù)來自哪個文件
                    df['數(shù)據(jù)來源文件'] = filename
                    df['數(shù)據(jù)來源路徑'] = dirpath

                    all_dataframes.append(df)
                    print(f"[{file_count}] 已讀取: {filename}")

                except Exception as e:
                    print(f"[{file_count}] 讀取失敗 {filename}: {e}")

    if not all_dataframes:
        print("沒有找到任何 Excel 文件!")
        return

    # 將所有 DataFrame 縱向拼接(按行合并)
    print("\n正在合并所有數(shù)據(jù)...")
    merged_df = pd.concat(all_dataframes, ignore_index=True)

    # 導(dǎo)出為新的 Excel 文件
    merged_df.to_excel(output_file, index=False, engine='openpyxl')

    print(f"\n合并完成!")
    print(f"共處理 {file_count} 個文件")
    print(f"總數(shù)據(jù)行數(shù): {len(merged_df)}")
    print(f"總數(shù)據(jù)列數(shù): {len(merged_df.columns)}")
    print(f"匯總文件已保存: {output_file}")


# ==================== 使用示例 ====================
if __name__ == "__main__":
    # 修改這里為你的數(shù)據(jù)文件夾路徑
    SOURCE_DIR = r"D:\數(shù)據(jù)源"

    # 執(zhí)行合并
    merge_excel_files(SOURCE_DIR, output_file="總表匯總.xlsx")

代碼逐行解析

1. 導(dǎo)入模塊

import os
import pandas as pd
from pathlib import Path
  • os:操作系統(tǒng)接口,用于遍歷文件夾
  • pandas as pd:數(shù)據(jù)處理庫,核心工具
  • Path:面向?qū)ο蟮穆窂讲僮?,比字符串拼接更安?/li>

2. 遞歸遍歷文件夾

for dirpath, dirnames, filenames in os.walk(source_dir):

os.walk() 是 Python 內(nèi)置的目錄遍歷函數(shù),它會遞歸地進入每個子文件夾。每次迭代返回三個值:

變量含義示例
dirpath當前文件夾的完整路徑"D:\\數(shù)據(jù)源\\北京分公司"
dirnames當前文件夾下的子文件夾列表["1月", "2月"]
filenames當前文件夾下的文件列表["1月報表.xlsx", "2月報表.xlsx"]

3. 文件過濾

if filename.endswith(('.xlsx', '.xls')) and not filename.startswith('~$'):
  • endswith(('.xlsx', '.xls')):只處理 Excel 文件
  • not filename.startswith('~$'):排除 Excel 的臨時鎖文件(編輯時自動生成)

4. 讀取 Excel 并標記來源

df = pd.read_excel(file_path, engine='openpyxl')
df['數(shù)據(jù)來源文件'] = filename
df['數(shù)據(jù)來源路徑'] = dirpath
  • pd.read_excel() 將 Excel 文件讀取為 DataFrame(類似表格的數(shù)據(jù)結(jié)構(gòu))
  • 添加兩列來源信息,方便后續(xù)追溯數(shù)據(jù)出處

5. 合并所有數(shù)據(jù)

merged_df = pd.concat(all_dataframes, ignore_index=True)

pd.concat() 是關(guān)鍵函數(shù):

  • 將列表中的所有 DataFrame 縱向拼接(上下連接)
  • ignore_index=True 重置行索引,避免索引重復(fù)

6. 導(dǎo)出結(jié)果

merged_df.to_excel(output_file, index=False, engine='openpyxl')
  • index=False 不導(dǎo)出 pandas 自動生成的行號
  • 最終得到一個包含所有數(shù)據(jù)的匯總 Excel 文件

進階技巧

技巧 1:指定讀取的 Sheet 名稱

如果 Excel 文件有多個 Sheet,可以指定讀取特定 Sheet:

df = pd.read_excel(file_path, sheet_name="Sheet1", engine='openpyxl')

或讀取所有 Sheet 并合并:

all_sheets = pd.read_excel(file_path, sheet_name=None, engine='openpyxl')
for sheet_name, sheet_df in all_sheets.items():
    sheet_df['來源Sheet'] = sheet_name
    all_dataframes.append(sheet_df)

技巧 2:統(tǒng)一列名后再合并

如果不同文件的列名不完全一致,可以先做列名映射:

# 定義統(tǒng)一列名映射
COLUMN_MAP = {
    '姓名': '姓名',
    '員工姓名': '姓名',
    'Name': '姓名',
    '部門': '部門',
    '所屬部門': '部門',
    '金額': '金額',
    '金額(元)': '金額',
}

# 讀取后統(tǒng)一列名
df = pd.read_excel(file_path)
df.rename(columns=COLUMN_MAP, inplace=True)

技巧 3:添加進度條(大文件友好)

from tqdm import tqdm

for dirpath, dirnames, filenames in tqdm(os.walk(source_dir), desc="掃描文件夾"):
    for filename in filenames:
        # ... 處理邏輯

常見問題

Q1:報錯ModuleNotFoundError: No module named 'openpyxl'

原因:沒有安裝 openpyxl 庫,pandas 讀取 .xlsx 需要此依賴。

解決:運行 pip install openpyxl

Q2:合并后列的順序亂了怎么辦?

pd.concat() 會自動對齊列名,但列順序可能不一致??梢允謩又付许樞颍?/p>

desired_columns = ['姓名', '部門', '金額', '日期', '數(shù)據(jù)來源文件', '數(shù)據(jù)來源路徑']
merged_df = merged_df[desired_columns]

Q3:某些 Excel 文件讀取出來是空的?

可能原因:

  • 文件本身沒有數(shù)據(jù)(只有表頭)
  • 文件被加密
  • 文件格式不是真正的 Excel(如 .csv 改了后綴)

建議在讀取后加判斷:

if df.empty:
    print(f"警告: {filename} 為空,跳過")
    continue

Q4:如何合并 .csv 文件?

只需將讀取方式改為 pd.read_csv()

if filename.endswith('.csv'):
    df = pd.read_csv(file_path, encoding='utf-8-sig')

總結(jié)

步驟核心函數(shù)作用
遍歷文件夾os.walk()遞歸掃描所有子目錄
讀取文件pd.read_excel()將 Excel 轉(zhuǎn)為 DataFrame
合并數(shù)據(jù)pd.concat()縱向拼接多個 DataFrame
導(dǎo)出結(jié)果to_excel()保存為新的 Excel 文件

本節(jié)掌握了 Python 辦公自動化中最常用的技能之一——多文件自動合并。無論是財務(wù)報表、銷售數(shù)據(jù)還是調(diào)查問卷,只要格式一致,都可以用這套代碼一鍵匯總。

以上就是Python實現(xiàn)一鍵合并多文件夾下百份Excel自動匯總至總表的詳細內(nèi)容,更多關(guān)于Python合并多文件夾下Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python將人民幣轉(zhuǎn)換大寫的腳本代碼

    python將人民幣轉(zhuǎn)換大寫的腳本代碼

    python將人民幣轉(zhuǎn)換大寫的代碼,有需要的朋友可以參考下
    2013-02-02
  • Python CSV模塊使用實例

    Python CSV模塊使用實例

    這篇文章主要介紹了Python CSV模塊使用實例,本文將舉幾個例子來介紹一下Python的CSV模塊的使用方法,包括reader、writer、DictReader、DictWriter.register_dialect等,需要的朋友可以參考下
    2015-04-04
  • 基于Python數(shù)據(jù)分析之pandas統(tǒng)計分析

    基于Python數(shù)據(jù)分析之pandas統(tǒng)計分析

    這篇文章主要介紹了基于Python數(shù)據(jù)分析之pandas統(tǒng)計分析,具有很好對參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Pandas庫中iloc[]函數(shù)的使用方法

    Pandas庫中iloc[]函數(shù)的使用方法

    在數(shù)據(jù)分析過程中,很多時候需要從數(shù)據(jù)表中提取出相應(yīng)的數(shù)據(jù),而這么做的前提是需要先“索引”出這一部分數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Pandas庫中iloc[]函數(shù)的使用方法,需要的朋友可以參考下
    2023-01-01
  • Python中try用法、內(nèi)置異常類型與自定義異常類型拓展案例詳解

    Python中try用法、內(nèi)置異常類型與自定義異常類型拓展案例詳解

    在?Python?里,try?語句主要用于異常處理,其作用是捕獲并處理代碼運行期間可能出現(xiàn)的異常,避免程序因異常而意外終止,這篇文章主要介紹了Python中try用法、內(nèi)置異常類型與自定義異常類型拓展,需要的朋友可以參考下
    2025-04-04
  • Python打印酷炫日志的方法詳解

    Python打印酷炫日志的方法詳解

    在Python中,日志是一種非常重要的工具,可以幫助我們更好地了解程序的運行情況,本文將介紹如何使用logging模塊來打印炫酷的日志,需要的可以參考一下
    2023-06-06
  • 情人節(jié)快樂! python繪制漂亮玫瑰

    情人節(jié)快樂! python繪制漂亮玫瑰

    情人節(jié)快樂! 這篇文章主要教大家如何用python繪制漂亮玫瑰花,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Python+OpenCV六種實時圖像處理詳細講解

    Python+OpenCV六種實時圖像處理詳細講解

    OpenCV常用的圖像處理為閾值二值化、邊緣檢測、輪廓檢測、高斯濾波、色彩轉(zhuǎn)換、調(diào)節(jié)對比度。本文主要介紹了利用Python和OpenCV對實時圖像進行上述六種操作的詳細講解,感興趣的可以了解一下。
    2021-11-11
  • python如何實現(xiàn)反向迭代

    python如何實現(xiàn)反向迭代

    這篇文章主要為大家詳細介紹了python如何實現(xiàn)反向迭代,進行反向迭代,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • numpy.linspace函數(shù)具體使用詳解

    numpy.linspace函數(shù)具體使用詳解

    這篇文章主要介紹了numpy.linspace具體使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-05-05

最新評論

政和县| 龙游县| 香河县| 农安县| 西贡区| 延长县| 新化县| 孝感市| 岳普湖县| 监利县| 大石桥市| 洪洞县| 崇明县| 九龙坡区| 金寨县| 筠连县| 拜泉县| 咸丰县| 浮山县| 易门县| 车险| 辽源市| 沁水县| 屏山县| 英山县| 桂林市| 罗定市| 江山市| 普兰县| 班玛县| 拜城县| 叶城县| 滨海县| 久治县| 磐安县| 噶尔县| 漾濞| 屏东市| 南漳县| 霍城县| 当涂县|