2015-10-09 45 views
0

我有兩個CSV文件需要從中提取正確的匹配。我想比較第一個文件中的每一行,並說明它在文件二中的任何一行上是否有匹配的值。如果找到匹配項,則聲音會移至fileOne中的下一行並重復。在兩個csv文件之間匹配python值

下面是我到目前爲止的代碼,但它似乎只是直接在每個文件行之間進行比較。因此,文件1中的第一行僅與文件2中的第一行進行比較,而不是循環遍歷文件2中的所有行,直到找到匹配或不匹配。

我懷疑它與我如何設置我的for循環有關,但我不確定。

import csv 

fileOne = csv.reader(open("fileone.csv", "r")) 
fileTwo = csv.reader(open("filetwo.csv", "r")) 

for row1 in fileOne: 
    for row2 in fileTwo: 
     row1String = row1[1].upper() + row1[0].upper() 
     row2String = row2[1].upper() + row2[0].upper() 

     if row1String == row2String: 
      print "Matched %s, %s, %s" % (row1[1], row2[1], row1[0]) 
      break 
     else: 
      print "No Match, %s" % (row1[0]) 
      break 
+0

'csv.reader'是一個迭代器 - 嘗試'fileOne = list(...)'。 – jonrsharpe

+0

謝謝,這工作完美。 – andyp

回答

0

改變你最後else塊爲else塊爲您for loop。所以,你for loop看起來像: -

file2items = [row2 for row2 in fileTwo] 
for row1 in fileOne: 
    for row2 in file2items: 
     row1String = row1[1].upper() + row1[0].upper() 
     row2String = row2[1].upper() + row2[0].upper() 

     if row1String == row2String: 
      print "Matched %s, %s, %s" % (row1[1], row2[1], row1[0]) 
      break 
    else: 
     print "No Match, %s" % (row1[0]) 
     break 

你會得出結論,「沒有比賽被找到」,只有遍歷整個你的第二文件之後。這個else塊會在迭代過程中永不斷裂時觸發(即沒有找到匹配)。

+1

這仍然存在'fileOne'和'fileTwo'是迭代器的問題,所以在第一次迭代時將被消耗。 – jonrsharpe

相關問題