如何在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'] != '':
注意事项
- 如果你的CSV用的不是逗号分隔符(比如制表符),需要在
csv.DictReader和csv.DictWriter里指定delimiter='\t'参数 - 注意
Confirmed列的值类型:如果CSV里是数字1而非字符串"1",要把判断改成row['Confirmed'] == 1(确保读取时数据类型正确) - 大文件处理时建议用
utf-8编码,避免乱码问题
内容的提问来源于stack exchange,提问作者bugnumber9
相关产品推荐
相关产品推荐

