我正在努力有效地从相对较大(几百MB)的CSV文件中删除重复的行,这些文件没有以任何有意义的方式排序。虽然我有一种技术可以做到这一点,但这是非常强大的力量,我确信有一种优雅而有效的方式。
答案 0 :(得分:2)
为了删除重复项,您必须拥有某种内存,告诉您之前是否看过一行。通过记住线条或者它们的校验和(几乎安全......) 任何像这样的解决方案都可能会产生“蛮力”的感觉。
如果你可以在处理它们之前对这些行进行排序,那么任务就相当容易,因为副本会彼此相邻。
答案 1 :(得分: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])]