使用 csv.to_csv 写入 csv 文件时的特殊字符
Special charactes when writing to csv file using csv.to_csv
我正在编写一个 Airflow 自动化作业,它从 Snowflake 仓库中提取数据表并将它们作为 csv 平面文件导出到 sftp。我将 csv 文件导出到本地驱动器,然后再将它们发送到 S3,然后再发送到 sftp。注意到某些字符序列正在被特殊字符替换。以下是将 Snowflake 表保存到本地驱动器中的 csv 的 Python 代码。
不将编码属性值传递给 to_csv,因为默认值为 utf-8。
import csv
import os
file_name = os.path.join(temp_file_path, _f)
query_output = cur.execute(_sql)
query_output.fetch_pandas_all().to_csv(file_name, index=False, quoting=csv.QUOTE_ALL,
header=False)
header = ','.join([col[0] for col in cur.description])
with open(file_name, 'r+') as f:
content = f.read()
f.seek(0, 0)
f.write(f'{header}\n' + content)
例如
有一个属性在 Snowflake 中的值为
研究 - 生产力支持计划
在导出的 csv 到本地驱动器中,它的值为
研究“生产力支持计划”
有没有一种方法很可能作为 to_csv 的参数来停止当前的行为。
任何hint/suggestion都将受到高度重视。
谢谢
我认为,问题在于 csv 文件的编码方式。
我找到了一个问答,问题和你的部分相同。
检查下面的 link:
Encoding/Decoding Unicode and writing CSV
It writes the file correctly but you are probably displaying the file using an editor or console that is using Windows-1252 encoding.
- Editor 或 console 或 Excel,默认情况下不是 UTF-8,但您可以通过在文件或使用 utf-8-sig 编码。
我正在编写一个 Airflow 自动化作业,它从 Snowflake 仓库中提取数据表并将它们作为 csv 平面文件导出到 sftp。我将 csv 文件导出到本地驱动器,然后再将它们发送到 S3,然后再发送到 sftp。注意到某些字符序列正在被特殊字符替换。以下是将 Snowflake 表保存到本地驱动器中的 csv 的 Python 代码。
不将编码属性值传递给 to_csv,因为默认值为 utf-8。
import csv
import os
file_name = os.path.join(temp_file_path, _f)
query_output = cur.execute(_sql)
query_output.fetch_pandas_all().to_csv(file_name, index=False, quoting=csv.QUOTE_ALL,
header=False)
header = ','.join([col[0] for col in cur.description])
with open(file_name, 'r+') as f:
content = f.read()
f.seek(0, 0)
f.write(f'{header}\n' + content)
例如
有一个属性在 Snowflake 中的值为 研究 - 生产力支持计划 在导出的 csv 到本地驱动器中,它的值为 研究“生产力支持计划”
有没有一种方法很可能作为 to_csv 的参数来停止当前的行为。 任何hint/suggestion都将受到高度重视。
谢谢
我认为,问题在于 csv 文件的编码方式。
我找到了一个问答,问题和你的部分相同。
检查下面的 link:
Encoding/Decoding Unicode and writing CSV
It writes the file correctly but you are probably displaying the file using an editor or console that is using Windows-1252 encoding.
- Editor 或 console 或 Excel,默认情况下不是 UTF-8,但您可以通过在文件或使用 utf-8-sig 编码。