Python:删除重复的CSV条目

ser*_*erk 5 python csv

我有一个包含多个条目的CSV文件.示例csv:

user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
ed, 123, ed@x.com
Run Code Online (Sandbox Code Playgroud)

我正在尝试通过CSV中的特定列删除重复项,但是下面的代码我得到的"列表索引超出范围".我想通过比较row[1]newrows[1]我会找到所有重复,只改写的唯一条目file2.csv.这不起作用,我不明白为什么.

f1 = csv.reader(open('file1.csv', 'rb'))
    newrows = []
    for row in f1:
        if row[1] not in newrows[1]:
            newrows.append(row)
    writer = csv.writer(open("file2.csv", "wb"))
    writer.writerows(newrows)
Run Code Online (Sandbox Code Playgroud)

我的最终结果是有一个列表来维护文件的顺序(set不会工作......对吗?),它应该是这样的:

user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
Run Code Online (Sandbox Code Playgroud)

Win*_*ert 8

row[1]指当前行(电话)中的第二列.这一切都很好.

但是,您newrows.append(row)将整行添加到列表中.

当您检查时,row[1] in newrows您正在根据完整行列表检查单个电话号码.但这不是你想要做的.您需要检查列表或一组电话号码.为此,您可能希望跟踪行和一组观察到的电话号码.

就像是:

f1 = csv.reader(open('file1.csv', 'rb'))
writer = csv.writer(open("file2.csv", "wb"))
phone_numbers = set()
for row in f1:
    if row[1] not in phone_numbers:
        writer.writerow(row)
        phone_numbers.add( row[1] )
Run Code Online (Sandbox Code Playgroud)