Python 合併檔案:幾十份 Excel/CSV 一鍵合埋一份

做零售、做會計、做營運嘅你,係咪成日都面對同一件事:每個分店、每個部門、每個月,都各自交一份 Excel 或者 CSV 上嚟,你就逐個開、逐個複製貼上,合埋做一份大表。十份八份仲頂得住,幾十份就真係貼到眼都花。

呢篇教學用 Python 嘅 pandas 加 glob,十零行 code 就一次過讀晒成個資料夾嘅 CSV/Excel,自動合埋做一份。兩個套件裝一次,之後日日用。

第一步:裝 pandas

pandas 係 Python 最常用嘅資料處理套件,用嚟讀寫 CSV、Excel 都好方便。如果你之前未裝過,喺命令提示字元打:

pip install pandas

如果你要處理 Excel 檔(.xlsx),仲要裝埋 openpyxl:

pip install openpyxl

第二步:寫程式

開一個新檔案 merge_files.py,貼入以下 code。記住將最頂嘅 FOLDER 改成你放檔案嘅資料夾。

import glob import pandas as pd FOLDER = "reports/*.csv" # 所有 CSV 檔都放喺呢個資料夾 files = sorted(glob.glob(FOLDER)) print("搵到", len(files), "個檔案") frames = [] for f in files: df = pd.read_csv(f) frames.append(df) combined = pd.concat(frames, ignore_index=True) combined.to_csv("reports/combined.csv", index=False, encoding="utf-8-sig") print("合併完成,共", len(combined), "行")

逐行解釋

  • glob.glob(FOLDER) —— 用 *.csv 通配符,一次過搵齊資料夾入面所有 CSV 檔,回傳一個檔案名清單。
  • sorted(...) —— 將檔案名排好次序,咁合併出嚟嘅表就會跟住檔案名順序,唔會亂。
  • pd.read_csv(f) —— 讀入每個 CSV,變做一個 DataFrame(即係一張表)。
  • pd.concat(frames, ignore_index=True) —— 將成疊表由上而下駁埋做一張大表。ignore_index=True 令行號重新由 0 數起,唔會重複。
  • to_csv(..., encoding="utf-8-sig") —— 輸出做一個新 CSV。utf-8-sig 確保中文喺 Excel 開返唔會變亂碼。

第三步:改做處理 Excel 檔

如果你收嘅係 .xlsx 檔,只需要改兩行:將 *.csv 改成 *.xlsx,再將 read_csv 改成 read_excel:

FOLDER = "reports/*.xlsx" ... df = pd.read_excel(f)

其餘嘅 concat 同輸出邏輯完全一樣。想連 CSV 同 Excel 一齊讀都得,寫多段 glob 分開讀就搞掂。

常見問題:點解合併出嚟會錯位?

合併表格最常出事,係因為每個檔案嘅「欄位」唔一致:有啲檔叫做「姓名」,有啲叫做「客戶名」,有啲多咗一欄。合併之前,記得先確保每個檔案嘅欄位名、次序都一模一樣。如果欄位名唔同,pandas 會各自開新欄,啲數據就會對唔齊。

總結

Python 教學:用 pandas 加 glob 十零行 code,就令電腦幫你自動讀齊成個資料夾嘅 CSV/Excel,再合埋做一份大表。由幾十份貼到手軟,變成一個指令搞掂。用同樣思路,你仲可以配合之前嘅排程教學,令佢每個月月頭自動合併各分店嘅報表,你返到公司打開就係一份現成嘅總結。