2011-07-28 4 views
1

의미있는 방식으로 정렬되지 않은 비교적 큰 (수백 MB) CSV 파일에서 중복 행을 효율적으로 제거하려고합니다. 제가이 일을 할 수있는 기술을 가지고 있지만, 그것은 매우 무차별 적이며, 모에는 우아하고 더 효과적인 방법이 있다고 확신합니다.효과적으로 파이썬에서 CSV에서 중복 제거하기

+1

당신은 코드를 시도? – Dogbert

+7

주문이 중요하지 않다면, 나는 좋은 ol ''sort file | uniq' 그리고 내 인생을 함께 누리십시오. – Jacob

+3

@cularis :'sort -u file'도 똑같은 일을하지 않겠습니까? –

답변

2

중복을 제거하려면 이전에 행을 본 적이 있는지 알려주는 메모리가 있어야합니다. 라인이나 아마도 체크섬을 기억해두면 (거의 안전 ...) 그런 솔루션은 아마도 "무력"을 느낄 것입니다.

줄을 처리하기 전에 정렬 할 수 있다면 작업은 서로 옆에 중복되므로 매우 쉽습니다.

+0

감사합니다. 실제로 SQL Server의 varchars에 덤프하고 SQL에서 고유 행을 반환하도록했습니다. 그것은 무력 이었지만 잘 작동했습니다. – TimothyAWiseman

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

고마워요,하지만 이것은 전체 라인의 고유성을 보았습니다 (본질적으로 전체 라인 만 키가 손상됨) 나는 전체 문자열의 고유성을 찾고있었습니다. 당신의 테크닉은 특정 상황에서 훌륭하게 작동 할 것이지만,이 파일들은 내가 사용하고있는 저전력 컴퓨터에서 메모리 문제없이 이것을하기에는 너무 컸습니다. – TimothyAWiseman