Python3读取csv并保留最新的副本

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

我有一个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

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最高的电子邮件。