Python附加到csv文件没有whiteline

问题描述:

我正在用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

的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' –