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

如何基于第二列去除CSV文件中的重复行

问题描述

需要移除CSV文件中第二列单元格重复的所有行,并将处理后的内容写入新的CSV文件。

输入CSV示例

Skufnoo,222228888444,-6026769894509215039,ВупÑень пупÑень â¤ï¸â€ðŸ©¹ðŸ’—,AA2888 ចាក់បាល់និងកាសុីណូអនឡាញ (070645555),1746008070,False,False,4,True,False,0
mAtkmb,5213786988,4161254730445748607,ДаниÑль Блинов,AA2888 ចាក់បាល់និងកាសុីណូអនឡាញ (070645555),1746008070,False,False,False,False,False,0
Ethan58,222228888444,7737583697013043644,Ethan,AA2888 ចាក់បាល់និងកាសុីណូអនឡាញ (070645555),1746008070,False,False,4,True,False,0
sheluvjoseph,1421438213,8544915453690665435,អន សំអុល,AA2888 ចាក់បាល់និងកាសុីណូអនឡាញ (070645555),1746008070,False,False,5,True,False,0

期望输出CSV示例

Skufnoo,222228888444,-6026769894509215039,ВупÑень пупÑень â¤ï¸â€ðŸ©¹ðŸ’—,AA2888 ចាក់បាល់និងកាសុីណូអនឡាញ (070645555),1746008070,False,False,4,True,False,0
mAtkmb,5213786988,4161254730445748607,ДаниÑль Блинов,AA2888 ចាក់បាល់និងកាសុីណូអនឡាញ (070645555),1746008070,False,False,False,False,False,0
sheluvjoseph,1421438213,8544915453690665435,អន សំអុល,AA2888 ចាក់បាល់និងកាសុីណូអនឡាញ (070645555),1746008070,False,False,5,True,False,0

尝试的无效Python代码

import csv

with (
    open('members.csv', 'r', encoding="utf8") as in_file,
    open('members2.csv', 'w', encoding="utf8") as out_file,
):
    writer=csv.writer(out_file)
    tracks = set()
    for row in in_file:
        key = row[1]
        if key not in tracks:
            writer.writerow(row)
            tracks.add(key)

解决方案

原代码的核心问题是直接遍历文件对象时,row是字符串而非解析后的CSV行列表:row[1]取的是字符串的第二个字符,不是第二列内容;同时用writerow写入字符串会把每个字符拆成单独单元格。

修正后的代码使用csv.reader解析每行数据,确保正确获取第二列值,同时保留CSV格式:

import csv

with open('members.csv', 'r', encoding="utf8") as in_file, \
     open('members2.csv', 'w', encoding="utf8", newline='') as out_file:
    reader = csv.reader(in_file)
    writer = csv.writer(out_file)
    seen_columns = set()
    
    for row in reader:
        # 避免处理不完整的行导致索引错误
        if len(row) >= 2:
            col2_value = row[1]
            if col2_value not in seen_columns:
                writer.writerow(row)
                seen_columns.add(col2_value)

代码说明

  • 用csv.reader读取输入文件,将每行转为字符串列表,row[1]即为第二列的值
  • 用seen_columns集合记录已出现的第二列值,过滤重复行
  • 写入时添加newline='',避免Windows系统下生成空行
  • 增加len(row)>=2的判断,防止处理不完整行时抛出索引错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:54:56