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

如何在Windows或Linux中按条件筛选并拆分大型CSV文件?

带条件筛选的大型CSV拆分方案

基于你提到的保留表头的拆分逻辑,只需要在写入行之前增加条件判断,就能实现只保留Confirmed列值为"1"的行,同时完成拆分。下面是具体的Python实现示例,完全兼容你原有的拆分逻辑:

import csv

# 配置参数
INPUT_CSV = "large_file.csv"  # 你的大型CSV文件路径
OUTPUT_PREFIX = "split_file_"  # 拆分后文件的前缀
ROWS_PER_FILE = 10000  # 每个小文件保留的行数(不含表头)

# 初始化变量
current_file = None
writer = None
row_count = 0

with open(INPUT_CSV, mode='r', newline='', encoding='utf-8') as infile:
    reader = csv.DictReader(infile)
    header = reader.fieldnames

    for row in reader:
        # 核心筛选条件:只保留Confirmed列值为"1"的行
        if row['Confirmed'] == '1':
            # 当达到行数限制或首次写入时,创建新文件并写入表头
            if row_count % ROWS_PER_FILE == 0:
                if current_file:
                    current_file.close()
                file_num = row_count // ROWS_PER_FILE + 1
                current_file = open(f"{OUTPUT_PREFIX}{file_num}.csv", mode='w', newline='', encoding='utf-8')
                writer = csv.DictWriter(current_file, fieldnames=header)
                writer.writeheader()

            # 写入符合条件的行
            writer.writerow(row)
            row_count += 1

# 关闭最后一个文件
if current_file:
    current_file.close()

扩展其他条件的方法

如果需要添加更多筛选规则,直接修改if判断语句即可:

  • 比如同时要求Confirmed为"1"且Amount大于100:
    if row['Confirmed'] == '1' and float(row['Amount']) > 100:
    
  • 排除空值:
    if row['Confirmed'] == '1' and row['Confirmed'] != '':
    

注意事项

  1. 如果你的CSV用的不是逗号分隔符(比如制表符),需要在csv.DictReader和csv.DictWriter里指定delimiter='\t'参数
  2. 注意Confirmed列的值类型:如果CSV里是数字1而非字符串"1",要把判断改成row['Confirmed'] == 1(确保读取时数据类型正确)
  3. 大文件处理时建议用utf-8编码,避免乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:32:20