36

ゴール

hotmail から CSV ファイルをダウンロードしましたが、多くの重複があります。これらの複製は完全なコピーであり、なぜ私の電話がそれらを作成したのかわかりません。

重複を取り除きたい。

アプローチ

重複を削除する Python スクリプトを作成します。

技術仕様

Windows XP SP3
パイソン 2.7
400 件の連絡先を含む CSV ファイル

4

6 に答える 6

68

更新: 2016

便利more_itertoolsな外部ライブラリを使用したい場合:

from more_itertools import unique_everseen
with open('1.csv','r') as f, open('2.csv','w') as out_file:
    out_file.writelines(unique_everseen(f))

@IcyFlame のソリューションのより効率的なバージョン

with open('1.csv','r') as in_file, open('2.csv','w') as out_file:
    seen = set() # set for fast O(1) amortized lookup
    for line in in_file:
        if line in seen: continue # skip duplicate

        seen.add(line)
        out_file.write(line)

同じファイルをその場で編集するには、これを使用できます

import fileinput
seen = set() # set for fast O(1) amortized lookup
for line in fileinput.FileInput('1.csv', inplace=1):
    if line in seen: continue # skip duplicate

    seen.add(line)
    print line, # standard output is now redirected to the file
于 2013-04-01T10:20:59.780 に答える
11

次のスクリプトを使用できます。

前提条件:

  1. 1.csv重複を構成するファイルです
  2. 2.csvこのスクリプトが実行されると、重複がなくなる出力ファイルです。

コード



inFile = open('1.csv','r')

outFile = open('2.csv','w')

listLines = []

for line in inFile:

    if line in listLines:
        continue

    else:
        outFile.write(line)
        listLines.append(line)

outFile.close()

inFile.close()

アルゴリズム説明

ここで、私がやっていることは次のとおりです。

  1. 読み取りモードでファイルを開く。これは重複があるファイルです。
  2. 次に、ファイルが終了するまで実行されるループで、その行が既に検出されているかどうかを確認します。
  3. 検出された場合は、出力ファイルに書き込みません。
  4. そうでない場合は、出力ファイルに書き込み、既に検出されたレコードのリストに追加します
于 2013-04-01T10:16:20.417 に答える