2014-01-29 77 views
5

我正在用python寫一個遊戲。在遊戲的每一輪(是的,遊戲有多輪)之後,我想將數據寫入CSV文件。Python附加到csv文件沒有whiteline

這是我的代碼:

with open('data.csv', 'a') as fp: 
      for player in self.players: 
       a = csv.writer(fp, delimiter=','); 
       data = [[player.name, player.penalty(), player.score()]]; 
       a.writerows(data); 

輸出的代碼(兩輪之後)CSV文件是:

player1,10,10.0

player2,5 ,5.0

player1,20,15.0

player2,10,7.5

問題是,每次腳本將數據附加到csv文件時,數據之間都會出現白線。而且我唯一想要追加白線的時間是在輪次之間。所以輸出應該是這樣的:

player1,10,10.0
player2,5,5.0

player1,20,15.0
player2,10,7.5

有我可以做到這一點的一種方式?

我的新工作代碼:

with open('take5.csv', 'ab') as fp: 
      for player in self.players: 
       a = csv.writer(fp, delimiter=','); 
       data = [[player.name, player.penalty(), player.score()]]; 
       a.writerows(data); 
      white_row = ['\n']; 
      a.writerows(white_row); 
+0

什麼是您的Python版本? –

+0

我的版本是2.7 – bbvanee

+0

我猜這個代碼是在一個函數中,並且你正在爲每一輪使用不同的值調用該函數? – 2014-01-29 13:47:12

回答

11

的Python 3:

with open('data.csv', 'a', newline='') as fp: 
    for player in self.players: 
     a = csv.writer(fp, delimiter=','); 
     data = [[player.name, player.penalty(), player.score()]]; 
     a.writerows(data); 

與Python 3還有就是CSV模塊中的變化,你可以閱讀here

的Python 2。 x:

只要改變open()爲二進制open('data.csv', 'ab')

您可以設置控制使用引用:

csv.writer(fp, delimiter=',',quoting=csv.QUOTE_MINIMAL)

正如從文檔的選項有:

csv.QUOTE_ALL指示作家反對報價所有領域。

csv.QUOTE_MINIMAL指示寫入器對象僅引用那些含有特殊字符,如分隔符,或quotechar的字符在lineterminator任何 字段 。

csv.QUOTE_NONNUMERIC指示編寫器對象引用所有非數字 字段。

指示讀者將所有未引用的字段轉換爲float類型。

csv.QUOTE_NONE指示編寫器對象永遠不會引用字段。當 當前分隔符出現在輸出數據中時,它前面有 當前的escapechar字符。如果沒有設置escapechar,那麼作家 將會出現錯誤,如果任何需要轉義的字符遇到 。

+0

是的,我已經嘗試過,但我的版本是2.7和「新行」不支持 – bbvanee

+0

@bbvanee看到我編輯關於打開爲'ab' –