Я пытаюсь эффективно удалить повторяющиеся строки из относительно больших (несколько сотен МБ) файлов CSV, которые не упорядочены каким-либо значимым образом. Хотя у меня есть техника для этого, это очень грубая сила, и я уверен, что есть моё элегантное и более эффективное средство.
Чтобы удалить дубликаты, вам нужно будет иметь какую-то память, которая говорит вам, если вы видели линию раньше. Либо, вспоминая строки, либо, возможно, их контрольную сумму (что почти безопасно...) Любое решение вроде этого, вероятно, будет иметь "грубую силу".
Если бы вы могли сортировать строки перед их обработкой, задача была бы довольно простой, так как дубликаты были бы рядом друг с другом.
Следующее предполагает, что строки, которые вы получаете из 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])]
sort file | uniq
и продолжить мою жизнь