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
的数据框,看起来像:
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
,但显然追加模式不会跳过现有文件的最后一行。
您使用的是 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
块还有一个额外的好处,即即使引发异常并且不执行以下代码,文件也会关闭。
我有一个名为 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
,但显然追加模式不会跳过现有文件的最后一行。
您使用的是 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
块还有一个额外的好处,即即使引发异常并且不执行以下代码,文件也会关闭。