2016-08-15 10 views
1

したがって、2つのcsvファイルがあります。 Book1.csvので、私はんではないsimilarities.csvに発生することBook1.csv内の行を引き出したいsimilarities.csvよりも多くのデータを持ってここで私は、しかし、結果は2つのcsvファイルの内容を比較する

Not in file: 2093 
Exists in file: 0 

あり、これまで私が持っているもの

with open('Book1.csv', 'rb') as csvMasterForDiff: 
     with open('similarities.csv', 'rb') as csvSlaveForDiff: 
      masterReaderDiff = csv.reader(csvMasterForDiff) 
      slaveReaderDiff = csv.reader(csvSlaveForDiff)   

      testNotInCount = 0 
      testInCount = 0 
      for row in masterReaderDiff: 
       if row not in slaveReaderDiff: 
        testNotInCount = testNotInCount + 1 
       else : 
        testInCount = testInCount + 1 


print('Not in file: '+ str(testNotInCount)) 
print('Exists in file: '+ str(testInCount)) 

ですBook1.csvの最初の16個のエントリがすべてではなく、similarities.csvに存在しないため、これが間違っていることがわかります。私は間違って何をしていますか?

答えて

1

csv.readerオブジェクトは、あなただけそれを介して一度を繰り返すことができることを意味しイテレータ、です。あなたが例えば、封じ込めチェックのためのリスト/セットを使用する必要があります。:

slave_rows = set(slaveReaderDiff) 

for row in masterReaderDiff: 
    if row not in slave_rows: 
     testNotInCount += 1 
    else: 
     testInCount += 1 
0

setsに変換した後、あなたは、コードの多くを記述することなくset関連&役立つ操作の多くを行うことができます。ここで

slave_rows = set(slaveReaderDiff) 
master_rows = set(masterReaderDiff) 

master_minus_slave_rows = master_rows - slave_rows 
common_rows = master_rows & slave_rows 

print('Not in file: '+ str(len(master_minus_slave_rows))) 
print('Exists in file: '+ str(len(common_rows))) 

はあなたが行うことができ、様々なset operationsです。

関連する問題