Python3读取csv并保留最新的副本
我有一个csv文件,我正试图从中删除具有重复电子邮件地址的行。如果电子邮件地址重复,我希望保留ID最高的行Python3读取csv并保留最新的副本,csv,python-3.x,duplicates,Csv,Python 3.x,Duplicates,我有一个csv文件,我正试图从中删除具有重复电子邮件地址的行。如果电子邮件地址重复,我希望保留ID最高的行 id email _website _store confirmation 11 test@abc.com base default 1 12 test2@abc.com base default 1 13 test@abc.com base default 1 我已经能够用下面的纸条打印出副本列表,但我需要用最新的ID写入csv f
id email _website _store confirmation
11 test@abc.com base default 1
12 test2@abc.com base default 1
13 test@abc.com base default 1
我已经能够用下面的纸条打印出副本列表,但我需要用最新的ID写入csv
for row in csv_f:
if row[1] not in seen:
seen.add(row[1])
else:
if (row[1] > ''):
pprint.pprint (row[1])
如果不读取文件中的所有项,则无法写入“最新”。因为最后一行可能包含更新
所以你必须把它们全部读一遍,要么确定哪些要删除,要么确定哪些要保留。这里有一个保持方法:
seen = {}
EMAIL=1
user_list = []
for user in csv_f:
seen[user[EMAIL]] = len(user_list) # index of next .append
user_list.append(user)
for n,user in enumerate(user_list):
if seen[user[EMAIL]] == n:
output(user) # Write it, print it, whatever
d = {} # mail: row
for row in sorted(csv_f): # should be sorted by the first field (aka ID)
d[row[1]] = row
pprint.pprint(d.values())
与此类似,我建议采用覆盖方法:
seen = {}
EMAIL=1
user_list = []
for user in csv_f:
seen[user[EMAIL]] = len(user_list) # index of next .append
user_list.append(user)
for n,user in enumerate(user_list):
if seen[user[EMAIL]] == n:
output(user) # Write it, print it, whatever
d = {} # mail: row
for row in sorted(csv_f): # should be sorted by the first field (aka ID)
d[row[1]] = row
pprint.pprint(d.values())
在这里,电子邮件用作键,具有相同键的后续行将覆盖存储的行。由于它是按ID排序的,最后一个覆盖必须是该电子邮件地址ID最高的覆盖
一行是v={r[1]:r表示排序(csv\u f)}.values()中的r
您可能希望再次对结果进行排序,因为字典的性质决定了值可以以任意顺序出现
不过还没测试过 你到底想干什么?您正在尝试写入CSV文件吗?如果是这样的话,可能会有帮助。:)是的,我想写CSV,但我知道怎么做。我在写我想写的行时遇到困难。我想确认一下test@abc.com是重复的电子邮件,只写ID最高的电子邮件。