Эффективное удаление дубликатов из CSV в Python

1

Я пытаюсь эффективно удалить повторяющиеся строки из относительно больших (несколько сотен МБ) файлов CSV, которые не упорядочены каким-либо значимым образом. Хотя у меня есть техника для этого, это очень грубая сила, и я уверен, что есть моё элегантное и более эффективное средство.

  • 1
    Вы пробовали какой-либо код?
  • 7
    Если порядок не важен, я бы просто использовал хороший старый sort file | uniq и продолжить мою жизнь
Показать ещё 3 комментария
Теги:
csv
performance

2 ответа

2
Лучший ответ

Чтобы удалить дубликаты, вам нужно будет иметь какую-то память, которая говорит вам, если вы видели линию раньше. Либо, вспоминая строки, либо, возможно, их контрольную сумму (что почти безопасно...) Любое решение вроде этого, вероятно, будет иметь "грубую силу".

Если бы вы могли сортировать строки перед их обработкой, задача была бы довольно простой, так как дубликаты были бы рядом друг с другом.

  • 0
    Спасибо, я фактически свалил его в varchars в SQL Server и заставил SQL возвращать уникальные строки. Это была грубая сила, но она работала хорошо.
1

Следующее предполагает, что строки, которые вы получаете из CSV, заканчиваются списками списков. Затем вы должны решить, на какой основе вы дедуплицируете (т.е. Какой столбец). В приведенном ниже примере это первый столбец (x[0])

def dedup(seq):
""" De-duplicate a list based on the first member of the sublist
"""
seen = set()
seen_add = seen.add
return [x for x in seq if
    x[0] not in seen
    and not seen_add(x[0])]
  • 0
    Спасибо, но это было связано с уникальностью всей строки (по сути, только полная строка скомпрометировала ключ), и я искал уникальность всей строки. Ваша техника отлично подойдет для определенных ситуаций, но эти файлы были слишком большими, чтобы сделать это без проблем с памятью на недостаточно мощной машине, которую я использую.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню