虽然有很多关于python csv引用的问题,但我相信我已经找到了一个未被覆盖的案例。
我有一些示例代码:
import pandas as pd
import csv
df = [(1, '1\' 2"',), (2, '1\' 4"')]
df = pd.DataFrame(df, columns=['months', 'height'])
print(df.head())
df.to_csv('blah.csv', index=False, quoting=csv.QUOTE_MINIMAL,
quotechar='"', escapechar='\\')
它产生以下输出:
months height
0 1 1' 2"
1 2 1' 4"
保存到csv,它看起来像:
months,height
1,"1' 2"""
2,"1' 4"""
但是,我希望它看起来像这样:
months,height
1,"1' 2\""
2,"1' 4\""
(如果你想知道,这是Spark的默认csv编写器的输出格式。)
双引号被转义的地方。我找不到办法做到这一点......任何指针都会受到赞赏。
你需要传递doublequote=False
(默认为True),还有quoting=QUOTE_NONNUMERIC
:
df.to_csv('blah.csv', index=False, quoting=csv.QUOTE_NONNUMERIC,
quotechar='"', escapechar='\\', doublequote=False)
见文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_csv.html
输出:
"months","height"
1,"1' 2\""
2,"1' 4\""