如何按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
相关产品推荐
相关产品推荐

