我正在用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.0player1,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 :(得分: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,则引用已过时。