大 CSV 文件按行数拆分成小文件(Excel 打不开怎么办)

实测可用 · 纯 Python 标准库,无需安装任何东西 · 2026-10-06

场景:导出的表有几万到几十万行,Excel 一打开就卡死或直接提示"文件太大"。本文给的脚本把大 CSV 按固定行数切成若干小文件,每片都带表头,Excel 能直接打开。整套逻辑只用 Python 标准库 csv + os,复制就能跑。

脚本(实测通过)

import csv, os

SRC = 'big.csv'        # 大文件路径
CHUNK = 100000         # 每片行数,按需改
OUTDIR = 'chunks'
os.makedirs(OUTDIR, exist_ok=True)

with open(SRC, newline='', encoding='utf-8-sig') as f:
    reader = csv.reader(f)
    header = next(reader)
    n = 0; idx = 1; out_f = None; writer = None
    for row in reader:
        if writer is None:
            name = f"{os.path.splitext(os.path.basename(SRC))[0]}_part{idx:03d}.csv"
            out_f = open(os.path.join(OUTDIR, name), 'w', newline='', encoding='utf-8-sig')
            writer = csv.writer(out_f)
            writer.writerow(header)          # 每片都补表头
            n = 0
        writer.writerow(row)
        n += 1
        if n >= CHUNK:
            out_f.close(); print('完成:', name)
            writer = None; idx += 1
    if writer:
        out_f.close(); print('完成:', name)

实测结果(本文用 2500 行真实跑过)

三个实测踩过的坑

  1. 编码必须 utf-8-sig:写 CSV 用 encoding='utf-8-sig'(带 BOM),Excel 双击打开中文才不乱码;用普通 utf-8 必乱。
  2. newline='' 不可省:csv 模块读写都要加 newline='',否则 Windows 上会隔行出空行,读的时候还可能把 \r 混进最后一列。
  3. 最后一片别忘关:行数不是 CHUNK 整数倍时,循环结束后还有一片没 close,必须在循环外补一个 if writer: out_f.close(),否则最后一片是空的或损坏。

不需要写代码?

如果你的大表还要做去重、合并、按条件筛选,可以看看 密封工具清单,或者直接下单让我帮你处理(19.9 起,脚本类服务,交付后可免费重做)。

← 返回全部干货 | 主页