Python附加到没有whiteline的csv文件

时间:2014-01-29 13:32:20

标签: python python-2.7 csv

我正在用python编写游戏。在每轮游戏之后(是的,游戏有多轮)我想将数据写入CSV文件。

这是我的代码:

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);

2 个答案:

答案 0 :(得分: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指示writer对象引用所有字段。

     

csv.QUOTE_MINIMAL指示writer对象仅引用这些字段   其中包含特殊字符,如分隔符,quotechar或any   lineterminator中的字符。

     

csv.QUOTE_NONNUMERIC指示writer对象引用所有非数字   字段。

     

指示读者将所有非引用字段转换为float。

     

csv.QUOTE_NONE指示编写器对象从不引用字段。什么时候   当前分隔符出现在输出数据中,前面是   目前的escapechar字符。如果未设置escapechar,则为编写者   如果任何需要转义的字符是,则会引发错误   遇到。

答案 1 :(得分:0)

上面的答案不起作用。您应该改用行终止符:

for player in self.players:
                a = csv.writer(fp, delimiter=',',lineterminator='\n');

这适用于 python2 和 3。

此外,引用选项应与引用字符结合使用。如果未使用quotechar,则引用已过时。