You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python实现带重叠行的CSV文件拆分

带重叠行的CSV拆分实现

你的需求本质是滑动窗口分块:每个块固定大小,下一个块的起始位置和上一个块末尾保留指定行数的重叠。按照你给出的示例,块大小为4000行,相邻块重叠1000行,每次滑动步长为3000行。

原有代码的问题在于每次写完一个块就直接清空所有缓存行,没有保留需要重叠的部分,且循环写法有误。以下是可直接运行的改进代码:

# 可按需调整的配置项
chunk_size = 4000    # 每个拆分文件的数据行数(不含表头)
overlap_size = 1000  # 相邻文件的重叠行数,匹配示例规则
step = chunk_size - overlap_size  # 分块滑动步长

def write_chunk(part_num, lines, header):
    with open(f'data_part_{part_num}.csv', 'w', encoding='utf-8') as f_out:
        f_out.write(header)
        f_out.writelines(lines)

with open("8-0new2.csv", "r", encoding='utf-8') as f:
    header = f.readline()
    all_data_lines = f.readlines()
    total_rows = len(all_data_lines)
    part = 1
    start_idx = 0
    while start_idx < total_rows:
        end_idx = min(start_idx + chunk_size, total_rows)
        # 截取当前块的行
        current_chunk_lines = all_data_lines[start_idx:end_idx]
        write_chunk(part, current_chunk_lines, header)
        # 滑动到下一个块的起始位置
        start_idx += step
        part += 1

逻辑说明

  • 按照示例规则验证:第1个文件取前4000条数据,第2个文件从第3001条数据开始取4000条,和第一个文件末尾1000条数据重叠,第3个文件从第6001条数据开始取,以此类推,完全匹配重叠要求。如果需要严格对齐你提到的3000行起始位置,只要把overlap_size调整为1001即可。
  • 最后不足4000行的剩余数据会自动写入最后一个拆分文件,不会丢失。
  • 如果源文件编码不是utf-8,把代码里的encoding参数改成对应编码即可,比如gbk、utf-8-sig。
  • 如果你的CSV文件过大(超过内存容量),可以把一次性读所有行的逻辑改成维护一个固定长度的缓存队列,逐行读入滑动输出即可;常规大小的CSV用上述写法逻辑最简单,出错概率低。

内容的提问来源于stack exchange,提问作者Treemore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:45:36