Python 2.7: удаление дубликатов из CSV в зависимости от условий - PullRequest
1 голос
/ 31 марта 2020

У меня есть CSV-файл, который имеет следующий формат:

Username,Name,Phone,Email,Country,Login
John23,John Doe,99999999,johndoe@yahoo.com,Italy,1585589097.787715
John23,John Doe,99999999,johndoe@yahoo.com,Italy,1585652050.037622

Я хочу удалить строки, содержащие повторяющееся «Имя пользователя», и просто сохранить строку с наибольшим значением в «Логин».

Сейчас у меня есть следующее, но оно удаляет только идентичные строки:

#remove duplicates and generate new csv
from more_itertools import unique_everseen

with open('jornalnoticias.csv','r') as f, open('jornalnoticias_full.csv','w') as out_file:
    out_file.writelines(unique_everseen(f))

1 Ответ

1 голос
/ 31 марта 2020

Вы можете прочитать в CSV-файле с csv.DictReader, сгруппировать элементы по UserName с помощью collections.defaultdict и вывести max Login строк с помощью csv.DictWriter.

Нижеследующее должно работать для Python2 .7 :

from csv import DictReader, DictWriter
from collections import defaultdict

with open("jornalnoticias.csv", mode="rb") as fin, open("jornalnoticias_full.csv", mode="w") as fout:
    reader = DictReader(fin)
    writer = DictWriter(fout, fieldnames=reader.fieldnames)

    # Group by username
    groups = defaultdict(list)
    for row in reader:
        groups[row["Username"]].append(row)

    # Write to CSV file
    writer.writeheader()
    for username, group in groups.items():

        # Get max login and write row
        highest_login = max(group, key=lambda x: float(x['Login']))
        writer.writerow(highest_login)

jornalnoticias_full.csv

Username,Name,Phone,Email,Country,Login
John23,John Doe,99999999,johndoe@yahoo.com,Italy,1585652050.037622

Примечание: Возможно, было бы неплохо перейти на последнюю версию Python 3.8 . Некоторые вещи немного изменились с Python 2.7 .

...