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

如何按time=0的规则将CSV文件分割为多个子文件

如何按特定规则分割CSV文件?

我有一个结构如下的CSV文件:

time,magnitude
0,13517
292.5669,370
620.8469,528
0,377
832.3269,50187
5633.9419,3088
20795.0950,2922
21395.6879,2498
21768.2139,647
21881.2049,194
0,3566
292.5669,370
504.1510,712
1639.4800,287
46709.1749,365
46803.4400,500

我需要将这个CSV分割为多个独立的CSV文件,示例如下:

文件1:

time,magnitude
0,13517
292.5669,370
620.8469,528

文件2:

time,magnitude
0,377
832.3269,50187
5633.9419,3088
20795.0950,2922
21395.6879,2498

分割规则是:每当遇到time=0的行时,创建一个新文件,将该行及后续所有行写入,直到下一个time=0的行出现(下一个time=0的行作为新文件的起始)。之前找到的方案都是按列值分组保存,不符合我的需求,请问该如何实现?


实现方案(Python)

用Python的csv模块可以轻松实现这个需求,核心逻辑是逐行读取原始文件,遇到time=0时切换新的输出文件,代码如下:

import csv

# 替换成你的原始CSV文件名
input_csv = "input.csv"
file_index = 1
current_output = None
current_writer = None
csv_header = None

with open(input_csv, 'r', newline='', encoding='utf-8') as src_file:
    csv_reader = csv.reader(src_file)
    # 读取表头,后续每个输出文件都要写入
    csv_header = next(csv_reader)
    
    for row in csv_reader:
        # 判断当前行的time是否为0
        if row[0] == '0':
            # 如果之前有打开的输出文件,先关闭
            if current_output:
                current_output.close()
            # 创建新的输出文件
            output_filename = f"文件{file_index}.csv"
            current_output = open(output_filename, 'w', newline='', encoding='utf-8')
            current_writer = csv.writer(current_output)
            # 写入表头和当前行
            current_writer.writerow(csv_header)
            current_writer.writerow(row)
            file_index += 1
        else:
            # 非起始行,写入当前打开的文件
            if current_writer:
                current_writer.writerow(row)

# 关闭最后一个打开的输出文件
if current_output:
    current_output.close()

代码说明

  • 用csv模块处理文件,避免手动解析CSV时遇到逗号、换行等特殊字符的问题
  • 逐行读取,内存占用极低,适合处理超大CSV文件
  • 每个输出文件都会自动写入表头,和示例格式一致
  • 严格按照time=0的行分割,保证每个文件的内容从time=0开始,到下一个time=0前结束

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:23:18