簡體   English   中英

to_csv追加模式未追加到下一個新行

[英]to_csv append mode is not appending to next new line

我有一個名為test.csv的csv,如下所示:

accuracy    threshold   trainingLabels
abc         0.506       15000
eew         18.12       15000

然后是一個名為summaryDF的數據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而不是to_csv但顯然附加模式不會跳過現有文件的最后一行。

您在使用熊貓包嗎? 您在任何地方都不會提及。

熊貓不會自動添加新行,我不確定如何強制使用新行。 但是您可以這樣做:

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塊還具有另一個優點,即使引發異常並且不執行以下代碼,文件也會被關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM