2011-07-28 69 views
1

意味のある方法で順序付けられていない比較的大きな(数百MBの)CSVファイルから重複した行を効果的に削除しようとしています。私はこれを行う手法を持っていますが、それは非常に力強いものです。私はモエがエレガントでより効果的な方法があると確信しています。効果的にPythonのCSVから重複を削除する

+1

あなたは任意のコードを試してみましたか? – Dogbert

+7

注文が重要でない場合は、私はちょうど良いol ''sort file |私の人生に乗ってください。 – Jacob

+3

@cularis: 'sort -u file'は同じことをしませんか? –

答えて

2

重複を削除するには、前に行が見えたかどうかを知らせる何らかの種類のメモリが必要です。いずれかの行またはおそらくそれらのチェックサム(はほぼ ...) のような解決策は、おそらく "ブルートフォース"の感触を持つでしょう。

行を処理する前にソートすることができれば、タスクは互いに重複しているのでかなり簡単です。

+0

ありがとう、私は実際にSQL Serverのvarcharsにダンプし、SQLに固有の行を返すようにしました。それはブルートフォースでしたが、うまくいきました。 – TimothyAWiseman

1

次の例では、CSVから取得した行がリストのリストになることを前提としています。あなたは、あなたが、複製DEいるもの基づいて決定する必要があります(つまり、どの列)以下の例では、それが最初の列です(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

関連する問題