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

如何去除3列CSV文件中基于第一列及第二列前3字符的重复行?

基于第一列+第二列前3字符去除CSV重复行的解决方案

嘿,这个需求我之前帮不少人处理过,刚好有几个实用的方案,不管你习惯用命令行快速搞定,还是用脚本灵活处理,都能满足你的要求~

方案1:用awk命令行快速处理(适合大文件/简单场景)

awk是处理文本文件的神器,一行命令就能搞定,而且对第二列不足3个字符的情况自动兼容(substr函数会直接取全部字符)。

不带表头的情况:

awk -F ',' '!seen[$1 SUBSTR($2,1,3)]++' list.csv > deduplicated_list.csv
  • 解释:
    • -F ',' 指定CSV的分隔符为逗号
    • seen 是一个关联数组,用来记录已经出现过的「第一列+第二列前3字符」组合
    • !seen[$1 SUBSTR($2,1,3)]++ 表示:第一次遇到这个组合时打印该行,之后再遇到就跳过

带表头的情况(需要保留第一行表头):

如果你的CSV有表头,只需要加个判断跳过表头的处理:

awk -F ',' 'NR==1{print;next} !seen[$1 SUBSTR($2,1,3)]++' list.csv > deduplicated_list.csv
  • NR==1{print;next} 表示第一行直接打印,然后跳过后续逻辑,继续处理下一行

方案2:用Python脚本处理(适合复杂CSV/需要扩展的场景)

如果你的CSV存在带引号的字段(比如第二列里包含逗号),或者需要更灵活的逻辑控制,Python的csv模块会更靠谱,能避免手动拆分字段的坑。

import csv

# 用来记录已经出现过的重复判定键
seen_keys = set()

# 打开原文件和去重后的文件
with open('list.csv', 'r', newline='', encoding='utf-8') as in_file, \
     open('deduplicated_list.csv', 'w', newline='', encoding='utf-8') as out_file:
    
    reader = csv.reader(in_file)
    writer = csv.writer(out_file)
    
    # 处理表头(如果有表头的话)
    try:
        header = next(reader)
        writer.writerow(header)
    except StopIteration:
        # 空文件的情况,直接退出
        pass
    
    # 遍历每一行处理
    for row in reader:
        # 确保至少有两列数据,避免索引错误
        if len(row) >= 2:
            # 生成判定重复的键:第一列 + 第二列前3个字符(不足3则取全部)
            duplicate_key = (row[0], row[1][:3])
            if duplicate_key not in seen_keys:
                seen_keys.add(duplicate_key)
                writer.writerow(row)
        else:
            # 列数不足的行,可选处理:要么直接写入,要么跳过
            writer.writerow(row)
  • 解释:
    • 用csv.reader和csv.writer处理CSV,自动处理带引号的字段
    • row[1][:3] 切片操作会自动兼容第二列字符数不足3的情况(比如只有2个字符就取全部)
    • 加入了空文件、列数不足的异常处理,更健壮

注意事项

  • 如果你的CSV分隔符不是逗号,记得修改对应参数:awk里改-F的值,Python里可以给csv.reader加delimiter='你的分隔符'
  • 处理大文件时,awk的性能会比Python更好,内存占用更低
  • 去重后的结果会保存在deduplicated_list.csv里,原文件不会被修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:01:45