我有一个包含多个条目的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
答案 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。