【问题标题】:to_csv append mode is not appending to next new lineto_csv 追加模式不追加到下一个新行
【发布时间】:2016-12-25 08:06:18
【问题描述】:

我有一个名为 test.csv 的 csv,它看起来像:

accuracy    threshold   trainingLabels
abc         0.506       15000
eew         18.12       15000

然后是一个名为 summaryDF 的数据框,如下所示:

accuracy    threshold   trainingLabels
def         0.116       342
dja         0.121       1271

我在做:

try:
        if os.stat('test.csv').st_size > 0:
                summaryDF.to_csv(path_or_buf=f, encoding='utf-8', mode='a', header=False)
                f.close()
        else:
            print "empty file"
            with open('test.csv', 'w+') as f:
                summaryDF.to_csv(path_or_buf=f, encoding='utf-8')
                f.close()
    except OSError:
        print "No file"
        with open('test.csv', 'w+') as f:
            summaryDF.to_csv(path_or_buf=f, encoding='utf-8')
            f.close()

因为我希望我的文件是:

accuracy    threshold   trainingLabels
abc         0.506       15000
eew         18.12       15000
def         0.116       342
dja         0.121       1271

相反,它是:

accuracy    threshold   trainingLabels
abc         0.506       15000
eew         18.12       15000def            0.116       342   
dja         0.121       1271

我该如何解决这个问题?我猜想使用 CSV 编写器而不是 to_csv,但显然附加模式不会跳过现有文件的最后一行。

【问题讨论】:

    标签: python csv append export-to-csv


    【解决方案1】:

    你在使用 pandas 包吗?你没有在任何地方提到这一点。

    Pandas 不会自动追加新行,我不知道如何强制。但你可以这样做:

    f.write('\n')
    summaryDF.to_csv(path_or_buf=f, mode='a', ...)
    

    您的代码中有一个不相关的错误:

    您似乎有一个名为 f 的全局文件对象。

    当你这样做时:

    with open('test.csv', 'w+') as f:
        ...
        f.close()
    

    您正在关闭的文件是您刚刚在with 块中打开的文件。您没有关闭全局文件 f,因为该变量在该范围内被 f 所掩盖。

    这是你想要的吗?无论哪种方式,这都没有意义。我们使用with 范围的原因是为了避免必须显式关闭文件。

    您可以使用:

    f = open('filename')
    ...
    f.close()
    

    with open('filename') as f:
        ...
    

    您不会关闭在with 块中打开的文件。使用with 块还有一个额外的好处,即即使引发异常并且不执行以下代码,文件也会关闭。

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多