如何用Node.js去除CSV文件中忽略最后一列的重复行(保留后项)
处理200万行CSV去重:保留重复项的最后一次出现
针对你200万行CSV的去重需求(按除最后一列外的列判断重复,删除首次出现的重复行、保留末次),推荐以下两种高效实现方案:
方案一:用awk命令行工具(首选,内存占用低、速度快)
awk是Unix/Linux系统自带的文本处理工具,处理大文件时内存占用极低,适合百万级数据量。
命令示例(假设CSV用逗号分隔,若为其他分隔符替换-F','中的逗号):
# 带表头的情况:先打印表头,再处理数据行 awk -F',' 'NR==1{print; next} {key=$1","$2","$3; line[key]=$0} END{for(k in line) print line[k]}' input.csv > output.csv # 无表头的情况:直接处理所有行 awk -F',' '{key=$1","$2","$3; line[key]=$0} END{for(k in line) print line[k]}' input.csv > output.csv
逻辑说明:
-F','指定CSV的分隔符,根据你的实际格式调整(比如制表符用-F'\t',示例中的...用-F'...')- 用前3列(拼接时加上分隔符,避免不同列内容拼接导致的歧义)作为唯一标识键
- 用关联数组
line存储每个键对应的最新行——后续出现的重复行会覆盖之前的记录 - 最后遍历数组输出所有行,每个重复组仅保留最后一次出现的条目
方案二:用Python Pandas(适合熟悉Python的场景)
Pandas是Python常用的数据处理库,代码可读性高,适合需要后续扩展数据处理逻辑的场景。
代码示例:
import pandas as pd # 读取CSV,sep指定分隔符,根据实际情况调整 df = pd.read_csv('input.csv', sep='...') # 按除最后一列外的所有列去重,保留最后一次出现的行 df_deduped = df.drop_duplicates(subset=df.columns[:-1], keep='last') # 保存去重后的结果,index=False避免写入额外的索引列 df_deduped.to_csv('output.csv', index=False, sep='...')
注意事项:
- 若内存紧张,可添加
chunksize参数分块读取处理,但200万行数据在常规8G内存机器上无需分块 subset参数可手动指定列名,比如subset=['column 1', 'column 2', 'column 3'],避免列顺序变化导致的问题
内容的提问来源于stack exchange,提问作者Alwaysdoubt
相关产品推荐
相关产品推荐

