大型 CSV · 實用指南
大型 CSV 檔案的分割方法
遇到 Excel 無法開啟、操作緩慢或難以分享的 CSV,依正確條件分割後會更容易處理。本文比較 Excel、Power Query、Python 與 LocaCSV,並說明如何安全地依欄位值分割資料。
結論:依分割條件選擇工具
50MiB 以下的 CSV 可在 LocaCSV 中依欄位值、指定資料筆數或目標檔案大小分割,所有處理都在瀏覽器內完成,最多輸出 100 個檔案。
若輸入超過 50MiB、需要多欄位組合鍵或排程自動化,使用本機 Python 會更有彈性。直接在 Excel 開啟大型 CSV 後手動剪貼,容易受到列數上限、記憶體與操作錯誤影響。
大型 CSV 無法開啟的常見原因
CSV 雖然是純文字,開啟它的程式仍有限制。Excel 工作表最多 1,048,576 列,超過後無法放入同一張工作表。即使未超過,也可能因欄位很多、儲存格很長、自動判型、記憶體不足或分隔符號判斷錯誤而變慢。
- 資料列超過 Excel 工作表上限。
- 程式將檔案展開到記憶體時,裝置可用資源不足。
- 分隔符號判斷錯誤,使一筆資料被拆成異常多的欄位。
- 以字串方式切逗號或換行,破壞引號內逗號、跳脫引號與儲存格內換行。
- UTF-8、Big5 等來源編碼與選擇值不同,造成亂碼或讀取失敗。
- Excel 自動轉換料號、前導零、長數字或看似日期的文字。
Excel、Power Query、Python、LocaCSV 比較
適合的方法取決於分割規則、檔案大小、是否需要重複執行,以及能否維護程式碼。
| 方法 | 適合情境 | 優點 | 注意事項 |
|---|---|---|---|
| Excel | 較小的 CSV,需要目視確認並只分割一次 | 熟悉的圖形介面 | 有 1,048,576 列上限;大型檔案緩慢,手動操作容易漏列或重複 |
| Power Query | 在 Excel 內重複使用匯入與轉換步驟 | 不直接修改來源,步驟可重新整理 | 載入工作表仍有列數上限;依值輸出多個 CSV 需要額外設計 |
| Python | 超過 50MiB、固定筆數或大小、定期批次 | 可細緻控制串流、命名、驗證與自動化 | 需自行維護執行環境、程式、測試、編碼與錯誤處理 |
| LocaCSV | 快速依值、筆數或目標大小分割 50MiB 以下 CSV | 無須帳號或安裝,在瀏覽器內處理並下載 ZIP | 輸出最多 100 個;依值分割時可選 1 個欄位 |
import csv
from pathlib import Path
source = Path("large.csv")
output_dir = Path("split")
output_dir.mkdir(exist_ok=True)
handles = {}
writers = {}
try:
with source.open("r", encoding="utf-8-sig", newline="") as input_file:
reader = csv.DictReader(input_file)
key_column = "department"
for row in reader:
key = row.get(key_column, "") or "(blank)"
if key not in writers:
output = output_dir / f"group-{len(writers) + 1:03d}.csv"
handle = output.open("w", encoding="utf-8-sig", newline="")
writer = csv.DictWriter(handle, fieldnames=reader.fieldnames)
writer.writeheader()
handles[key] = handle
writers[key] = writer
writers[key].writerow(row)
finally:
for handle in handles.values():
handle.close()使用 LocaCSV 分割的步驟
逗號、雙引號、跳脫引號與儲存格內換行會依 CSV 規則解析。執行前先從預覽確認欄位整齊,是避免錯誤最重要的一步。
- 開啟 CSV 分割工具並選取一個 CSV 檔案。
- 確認是否有標頭、輸入編碼與分隔符號;若預覽欄位錯位,請勿繼續。
- 選擇依欄位值、資料筆數或目標大小分割。
- 依值模式設定欄位與空白值處理;其他模式設定每檔資料筆數或目標 MiB。
- 確認輸出編碼、UTF-8 BOM 與輸出分隔符號後開始分割。
- 檢查輸入、輸出與排除筆數、輸出檔案數及警告,再下載 ZIP。
依欄位值分割的方法
依值分割會針對某一欄位中的每個分類建立獨立檔案,例如門市、部門、客戶或月份。若「門市」欄有台北、台中、高雄,相同值的資料列會進入同一個 CSV,最後產生三個輸出。
標頭重複、缺少標頭或含多餘空白時,請搭配預覽與從 1 開始的欄位編號確認。分割值若含 Windows 檔名禁用字元或保留名稱,LocaCSV 會轉換成可安全使用的檔名。
- 相同值的資料列會進入同一個輸出檔案。
- 空白值可排除或輸出到獨立檔案。
- 每次只能選擇一個分割欄位。
- 若唯一值超過 100 個,處理會停止,且不提供不完整的 ZIP。
- 提供 ZIP 前會驗證「輸入筆數 = 輸出筆數 + 排除筆數」。
資料筆數與檔案大小的注意事項
CSV 的處理難度不只由檔案大小決定。同為 50MiB,數百萬筆短資料與含有超長儲存格、引號內換行的檔案,所需記憶體與時間會不同。
LocaCSV Free 的單一輸入上限為一個 50MiB 檔案。裝置效能、瀏覽器、CSV 結構與輸出量可能使較小的檔案也難以處理。改副檔名或直接放入壓縮檔無法繞過限制。
- 筆數模式不計標頭,只計算每個檔案中的資料列。
- 目標大小以套用輸出編碼後的實際位元組判定,包含 BOM 與每檔重複的標頭。單筆資料若已超過目標,會保持完整並單獨輸出。
- 所有模式最多輸出 100 個檔案。
- 不要覆寫原始檔;另存 ZIP 並核對筆數。
- 若要用 Excel 開啟輸出,還要確認每個檔案少於 1,048,576 列。
字元編碼與亂碼處理
台灣的舊系統 CSV 常見 Big5,新系統則多使用 UTF-8。LocaCSV 會將 UTF-8 與 Shift_JIS 列為自動判斷候選;Big5 必須手動選擇。若預覽中的姓名、地址、罕見字或標點變成亂碼,請不要直接開始處理。
輸出可選 UTF-8 含 BOM 或不含 BOM,也可選 Big5。若內容含 Big5 無法表示的字元,LocaCSV 會停止,而不是偷偷替換成「?」。若來源標示為 Big5-HKSCS 等不同變體且預覽不正確,請先用本機工具轉成 UTF-8。
- 在預覽中檢查姓名、地址、全形標點與罕見字。
- 欄位錯位通常是分隔符號問題,請確認逗號、分號、Tab 或直線。
- 不確定編碼時,確認來源系統的匯出設定。
- 不要把亂碼結果另存並覆蓋原始檔,應從原檔重新操作。
安全性與本機處理
LocaCSV 使用瀏覽器內的 Web Worker 處理 CSV。CSV 內容、檔名、標頭、儲存格值與分割值不會為了處理而上傳到外部伺服器。結果也在瀏覽器內建立,下載或重設後會釋放保留的參照。
公開資訊網站使用 Cloudflare Web Analytics 了解頁面瀏覽。處理網站不載入廣告或分析 SDK,只會將功能、容量區間、時間區間、固定錯誤代碼等不含識別碼的最小使用事件送往第一方專用端點。事件不含 CSV 內容、檔名、精確容量或筆數,傳送失敗也不會阻止處理與下載。
處理機密資料時,仍應確認組織規範、裝置安全、瀏覽器擴充功能與下載資料夾權限。在瀏覽器內處理不代表整台裝置自動安全。
大型 CSV 分割常見問題
Excel 無法開啟的 CSV 也能分割嗎?
若 CSV 不超過 50MiB、可指定支援的編碼與分隔符號,且輸出不超過 100 個,就能在 LocaCSV 分割。即使資料列超過 Excel 工作表上限,CSV 本身仍可讀取,但實際處理能力會受裝置與檔案結構影響。
可以每 10 萬筆或每 10MB 分割嗎?
可以。筆數模式不計標頭;目標大小可設為 0.1~50MiB,並依編碼後含 BOM 與標頭的實際位元組分割。單筆資料不會被截斷,因此可能單獨超過目標。
可以處理超過 50MiB 的 CSV 嗎?
目前公開的 Free 單一輸入工具上限為一個 50MiB 檔案,並未宣稱可處理更大的輸入。請先在本機將來源分小。
Big5 CSV 可以轉成 UTF-8 嗎?
可以。手動選擇 Big5 輸入,再選擇 UTF-8 含 BOM 或不含 BOM 輸出。執行前請在預覽確認姓名、地址與罕見字。
CSV 會上傳到伺服器嗎?
CSV 內容、檔名、標頭、儲存格值與分割值不會為了處理而上傳。分割與 ZIP 建立都在瀏覽器內執行。