2015-10-09 47 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

相关问题