Python:删除重复的CSV条目
我有一个包含多个条目的CSV文件。示例csv:Python:删除重复的CSV条目,python,csv,Python,Csv,我有一个包含多个条目的CSV文件。示例csv: user, phone, email joe, 123, joe@x.com mary, 456, mary@x.com ed, 123, ed@x.com 我试图通过CSV中的特定列删除重复项,但是使用下面的代码,我得到了一个“列表索引超出范围”。我想通过比较行[1]和新行[1]我会找到所有重复项,只重写file2.csv中的唯一项。但这不起作用,我不明白为什么 f1 = csv.reader(open('file1.csv', 'rb'))
user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
ed, 123, ed@x.com
我试图通过CSV中的特定列删除重复项,但是使用下面的代码,我得到了一个“列表索引超出范围”。我想通过比较行[1]
和新行[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
will not work…right?),它应该如下所示:
user, phone, email
joe, 123, joe@x.com
mary, 456, mary@x.com
行[1]
指当前行(电话)中的第二列。这一切都很好
但是,您可以newrows.append(row)
将整行添加到列表中
当您选中新行中的行[1]时,您正在对照完整行列表检查单个电话号码。但那不是你想做的。你需要核对一个列表或一组电话号码。为此,您可能希望跟踪行和一组观察到的电话号码
比如:
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] )
这个解决方案对我来说很有效,但由于我是Python新手,有人能解释一下最后一点吗
writer.writerow(row)
phone_numbers.add( row[1] )
我知道作者查看文件“file2.csv”并写入每一行。什么电话号码.add(第[1]行)可以消除重复的电话号码?我知道这已经过去很久了,但如果其他人在这里登陆,请找到更好的答案。我认为数据库在这里非常有用。Python是用SQLite实现OOB的,你知道吗?当某些东西不起作用时,你总是需要描述发生了什么。这是一个错误吗?没什么吗?错了吗?我错了。。。我的代码当前生成的列表索引超出范围。这没有意义,因为它正在用第[1]行搜索第二个“列”。@serk,我的坏朋友错过了。不过,您通常应该包括完整的错误以及行号和回溯。这很有效。谢谢我认为set
不起作用,因为它无法保持正确的输出顺序。如果我使用了newrows
列表,并将append(row)
修改为writerow
,这仍然有效吗?@serk,set可以工作,因为我从不关心顺序。我只检查里面有没有东西。是的,添加到列表中会很好。顺便说一句,如果你真的要删除重复的电话号码,比如说电话营销数据库,那么你就有可能用这种方式浪费掉你的电话列表。有时,读卡器文件后面的电话号码会比读卡器文件前面的电话号码更新、更准确,因为它们会及时写入文件earlier,然后再写入读卡器文件后面的相同电话号码。write.writerow(行)
应该是writer.writerow(行)