2015-07-28 33 views
0

我想編寫一個迭代輸出,每個版本都放在csv的新行中。我曾經嘗試這樣做:Python 2.7.10 csv如何在新行中寫入迭代輸出的每個版本

#matching questions 
for ind1,key1 in enumerate(file1): 
    for ind2,key2 in enumerate(file2): 
     ques1 = file1[key1] 
     ques2 = file2[key2] 
     match_ratio = difflib.SequenceMatcher (None, ques1, ques2).ratio() 
     n = csv.writer(open("output.csv", "wb")) 
     n.writerow([key1, ques1, key2, ques2, match_ratio]) 

正如你可以看到,我試圖從不同的字典相互匹配兩個字符串,然後我要輸出每一個鍵和值,比賽比成csv文件,所以我可以在excel中使用輸出。但是,每個變量只有最後一個版本才能獲得輸出結果,我不知道爲什麼。

爲什麼每次都不會將變量輸出到csv的新行中?我該怎麼做才能做到這一點?

提前致謝!

+0

在「wb」模式下,每次比賽結束後打開文件。嘗試「a」模式或將csv.writer與循環外部的行結合使用。 –

+0

試圖以「a」模式打開文件,但現在每行輸出後都有空行。我將處理1000個問題,這會使文件太大。任何方式來解決這個問題? – user241691

+0

您應該將「csv.writer」的開頭和實例移到循環外部。 –

回答

0

正如@ amal-ts所說,你應該使用append模式來打開文件。

並打開文件中的每一環是糟糕的主意,所以你應該考慮使用with

with open("output.csv", "ab") as f: 
    for ind1,key1 in enumerate(file1): 
     for ind2,key2 in enumerate(file2): 
      ques1 = file1[key1] 
      ques2 = file2[key2] 
      match_ratio = difflib.SequenceMatcher (None, ques1, ques2).ratio() 
      n = csv.writer(f) 
      n.writerow([key1, ques1, key2, ques2, match_ratio]) 

最後,你應該檢查match_ratio值來檢查你的空行的問題。

+0

由於某種原因,使用這塊代碼解決了空行問題,怪異的... – user241691

+0

選擇這個作爲最好的答案,完美的工作! – user241691

0

您的代碼正在重寫每次迭代中的數據,而是以附加模式打開文件。

+0

是的,現在運行良好,除了輸出每一行之後都有一個空行。我應該如何解決這個問題? – user241691

+0

您可以打印writerow()內容並查看它在哪裏獲取空行? –

相關問題