【问题标题】:Special charactes when writing to csv file using csv.to_csv使用 csv.to_csv 写入 csv 文件时的特殊字符
【发布时间】:2021-11-21 21:59:58
【问题描述】:

我正在编写一个 Airflow 自动化作业,它从 Snowflake 仓库中提取数据表并将它们作为 csv 平面文件导出到 sftp。我将 csv 文件导出到本地驱动器,然后将它们发送到 S3,然后再发送到 sftp。注意到对于某些字符序列被特殊字符替换。以下是将雪花表保存到本地驱动器中的 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 的参数来停止当前行为。 任何提示/建议都将受到高度重视。

谢谢

【问题讨论】:

  • 如果您使用pandas.read_csv(或任何方法)将文件读回Python,字符是否仍然不正确?
  • 为什么你需要写一个这样的自定义标题?为什么不在保存到 CSV 文件之前修改数据框?

标签: python python-3.x pandas csv export-to-csv


【解决方案1】:

我认为,问题在于 csv 文件的编码方式。
我找到了一个问答,问题与您的部分相同。
检查以下链接:
Encoding/Decoding Unicode and writing CSV

它会正确写入文件,但您可能正在使用使用 Windows-1252 编码的编辑器或控制台显示文件。

  • 编辑器或控制台或 Excel,默认情况下不使用 UTF-8,但您可以通过在文件开头放置 UTF-8-fake-BOM (U+FEFF) 或使用 utf-8 来欺骗它-sig 编码。

【讨论】:

  • 我同意这可能是正在发生的事情。
  • 我认为你是对的,我在 Numbers 中打开了报告(Mac OS 默认),它正确地选择了 UTF8 编码。没有看到特殊字符。将与客户端检查为什么在源文件中不存在特殊字符时抱怨处理特殊字符。谢谢
  • 随时兄弟@Vijay
猜你喜欢
  • 2021-05-26
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2012-03-25
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多