2013-05-22 139 views
1

我有兩個文件。一個用單詞列表讓我們說a.txt和另一個csv文件,其第二行是單詞b.csv。我想檢查a.txt中的任何單詞是否在b.csv的第二行,並只打印那些不匹配的行。共有3行在csv文件中。從文件匹配單詞列表並輸出其餘單詞

我到目前爲止所取得的成績是打印那些從單詞列表中有單詞的行。但我想要的其他線路。這是我的代碼:

reader = csv.reader(open('b.csv', 'rb')) 
op = open('a.txt', 'r') 
ol = op.readlines() 

for row in reader: 
    for word in ol: 
     if word==row[1]: 
      print row[0],row[1],row[2] 

現在我該如何使它打印不匹配的行? 謝謝!

回答

0

侵入性最小的解決方案(即保持你的嵌套循環)將沿

for row in reader: 
    match = False 
    for word in ol: 
     if word==row[1]: 
      match = True 
      break 

    if not match: 
     print row[0],row[1],row[2] 

或使用一些更Python的善良線的東西:

for row in reader: 
    for word in ol: 
     if word==row[1]: 
      break 
    else: 
     print row[0],row[1],row[2] 

else:位只執行前面的循環正常結束(沒有達到break)。

至於建議的thg435,這是更簡單:

for row in reader: 
    if row[1] not in ol: 
     print row[0],row[1],row[2] 
+0

謝謝。但是,我相當驚訝的是,「其他」是比原來的「如果」倒退的意圖。這是平常的事嗎?對我來說是新的。 –

+0

'else'屬於第二個'for':http://docs.python.org/2/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops –

+0

I看到。從不知道這一點。確實美麗的教訓。謝謝! :) –