【问题标题】:Python append to csv file without whitelinePython附加到没有白线的csv文件
【发布时间】:2014-02-21 08:18:39
【问题描述】:

我正在用 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 文件追加数据时,数据之间有一条白线。我唯一一次想在两轮之间添加一条白线。所以输出应该是这样的:

播放器1,10,10.0
播放器2,5,5.0

播放器1,20,15.0
播放器2,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);

【问题讨论】:

  • 你的python版本是多少?
  • 我猜这段代码在一个函数中,而您在每一轮都用不同的值调用该函数?
  • 是的,没错,但我现在可以工作了,我会更新我的脚本

标签: python python-2.7 csv


【解决方案1】:

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

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

这适用于 python2 和 3。

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

【讨论】:

    【解决方案2】:

    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 指示 writer 对象仅引用这些字段 其中包含特殊字符,例如分隔符、引号字符或任何 lineterminator 中的字符数。

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

    指示读者将所有未加引号的字段转换为浮点类型。

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

    【讨论】:

    • 是的,我试过这个,但我的版本是 2.7,不支持“换行”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2019-03-26
    • 1970-01-01
    • 2021-09-04
    • 2020-12-26
    • 2016-03-12
    • 2021-06-27
    相关资源
    最近更新 更多