2017-06-15 14 views
1

.csvファイルのインプレイスを削除するコードを取得しようとしています。Pythonは重複を削除します。

def deleteDuplicate(): 
    seen = set() 
    dupeCount = 0 
    counter = 0 
    with FileInput('DBA.csv', inplace=1) as f: 
     f, f_orig = tee(f) 
     for row, line in zip(csv.reader(f), f_orig): 
      if row[2] in seen: 
       dupeCount+=1 
       continue 
      seen.add(row[2]) 
      counter+=1 
      print(line, end='') 
     print(counter) 
     print("Removed {} Duplicates".format(dupeCount)) 

上記のコードは次のように小さいテストスケールで重複を除去するための完璧な作品:

私は何をすべきかの提案を持って、このように見えるのコードになってしまった http://www.sharecsv.com/s/29ae855f20472de54b12fa66bbe3cbb9/DBA.csv

見つけることができます

null,first,second,third 
zero,one,two,three 
null,first,second,third 
nul,un,deux,trois 
0,"1,one",2,3 

大きな.csvファイルで実行すると、重複は完全になくなりますが、さらに4行が削除されてしまいます。削除された4行は私のdupeCountで追跡されないので、if文を起動するはずがありません。

私はitertoolsのtee()の使用方法が何であり、それがなぜ有益なのかよくわからないことを認めなければなりません。

私の2つの質問は次のとおりです。 deleteDuplicate()は、より大きな.csvファイルで4行を削除するのはなぜですか、なぜtee()とzipが使用されるのですか?データの最初の行で

+2

これまでにティー機能は見たことがありません。 'pandas'モジュールには' drop_duplicates'メソッドがあり、これはあなたがここでやっていることとまったく同じです。代わりにそれを使用することを検討してください車輪を再発明することに意味がない。ここにあるドキュメンテーション:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html –

+0

これをまだ見ていないと仮定すると、ここにはitertools.tee()のドキュメントがあります。 https://docs.python.org/2/library/itertools.html#itertools.tee – 16num

+0

私はドキュメントを読み、zip()とtee()の両方を理解しています。私はちょうどここにそれを持つ利点を理解していない。 – Rainoa

答えて

1

ルックは、説明はそれは「\ n」は(だけでなく、カンマ)で改行を持っているので、データ

Date,Price DKK,URL,Description 
19/5,1 kr.,http://www.dba.dk/8660-vegavej-1-14/id-102010171/,"8660, Vegavej 1-14, hel�rsgrund, Boligprojekt s�lges 1-14 boliger 
R�kkehusene ligger ud til et stort smukt fredet omr�de. Alle boliger har private sydvendte haver, som ligger direkte ud til et f�lles omr�de. Der er altan, hvorfra der er udsigt over det facinerende og karakteristiske landskab med �l�b, heste, gravh�j. 
Aktiv fritid og lokalmilj�. 
Tebstrup er en lille landsby med 660 indbyggere. I byen er der skole, b�rnehave m.m 
se" 
19/5,1.599.000 kr.,http://www.dba.dk/7800-4-103-372-2013/id-93506363/,"7800 4, 103, 372, 2013, Fyrt�jet 8, 7656, 6130, 80000, Villa" 

の7「行」を持っていますが、とそれを読めば、 csv(そしてexcel)改行は引用符で囲まれているので、その行に唯一のセルがあります。

with open("output.csv") as f : 
    for row in csv.reader(f): 
     print(row) 

['Date', 'Price DKK', 'URL', 'Description'] 
['19/5', '1 kr.', 'http://www.dba.dk/8660-vegavej-1-14/id-102010171/', '8660, Vegavej 1-14, hel\xef\xbf\xbdrsgrund, Boligprojekt s\xef\xbf\xbdlges 1-14 boliger\r\nR\xef\xbf\xbdkkehusene ligger ud til et stort smukt fredet omr\xef\xbf\xbdde. Alle boliger har private sydvendte haver, som ligger direkte ud til et f\xef\xbf\xbdlles omr\xef\xbf\xbdde. Der er altan, hvorfra der er udsigt over det facinerende og karakteristiske landskab med \xef\xbf\xbdl\xef\xbf\xbdb, heste, gravh\xef\xbf\xbdj.\r\nAktiv fritid og lokalmilj\xef\xbf\xbd.\r\nTebstrup er en lille landsby med 660 indbyggere. I byen er der skole, b\xef\xbf\xbdrnehave m.m\r\nse'] 
['19/5', '1.599.000 kr.', 'http://www.dba.dk/7800-4-103-372-2013/id-93506363/', '7800 4, 103, 372, 2013, Fyrt\xef\xbf\xbdjet 8, 7656, 6130, 80000, Villa'] 

ファイルの行がcsvデータの行と等しくない可能性があります。

編集テストファイルへ

追加あなたが見てすることができるものを確認します。

null,first,second,third 
zero,one,two,"three 
,four 
five\r\n" 
null,first,second,third 
nul,un,deux,trois 
0,"1,one",2,3 
+0

ありがとうございました。あなたは私の問題を強調しました。私はまだ最初の行が私のCSVで最後の4行を失う方法を理解していない。しかし、最初の行を削除することで、4ストップの削除が行われました。 – Rainoa

関連する問題