Python:删除重复的CSV条目

时间:2011-10-07 03:35:39

标签: python csv

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

user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
ed, 123, ed@x.com

我正在尝试通过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)

我的最终结果是有一个维护文件序列的列表(set不起作用......对吗?)应该是这样的:

user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com

3 个答案:

答案 0 :(得分: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] )

答案 1 :(得分:0)

该解决方案对我有用,但是由于我是Python的新手,所以有人可以解释一下最后一点

writer.writerow(row)
phone_numbers.add( row[1] )

我了解作者会查看文件“ file2.csv”并写入每一行。什么phone_numbers.add(row [1])可以消除重复?

答案 2 :(得分:0)

我知道这已经不复存在了,但是如果有人落在这里,请找到更好的答案here