You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Pandas DataFrame写入S3 Bucket的CSV文件时出现多余引号问题

问题:将DataFrame写入S3的CSV文件时出现多余双引号

原始DataFrame数据

id |  Name   | Address
_______________________
1  | Ram     | New York
2  | Ram,pal | Mumbai
3  | Toku    | Warsaw
4  | Joku    | SA
5  | Noku    | Tokoyo

现有代码

def gen_reports(self, df: str, filename: str):
    """use panda over here"""
    df = pd.DataFrame(df)
    csv_buffer = StringIO()
    df.to_csv(csv_buffer, sep=",", quotechar="'", index=False)
 
    self.s3_client.put_object(Bucket=self.prop.bucket_data, Key=self.prop.key_data + filename,
                              Body=csv_buffer.getvalue())

当前生成的test.csv内容

id,Name,Address
1 ,Ram ,New York
2 ,"""Ram,pal""",Mumbai
3 ,Toku,Warsaw
4 ,Joku,SA
5 ,Noku,Tokoyo

期望的test.csv内容

id,Name,Address
1 ,Ram ,New York
2 ,"Ram,pal",Mumbai
3 ,Toku,Warsaw
4 ,Joku,SA
5 ,Noku,Tokoyo

解决方案

问题根源有两点:

  1. 函数参数类型标注错误,把df标注为str后又转成DataFrame,导致原始数据格式混乱,触发不必要的引号转义。
  2. 配置的quotechar="'(单引号)与期望输出的双引号不符,且未明确控制引号添加逻辑,导致已有引号被重复转义。

修改后的代码:

import csv
from io import StringIO
import pandas as pd

def gen_reports(self, df: pd.DataFrame, filename: str):
    """use panda over here"""
    csv_buffer = StringIO()
    # 仅对包含分隔符的字段添加双引号,避免多余转义
    df.to_csv(csv_buffer, sep=",", quotechar='"', quoting=csv.QUOTE_MINIMAL, index=False)
 
    self.s3_client.put_object(Bucket=self.prop.bucket_data, Key=self.prop.key_data + filename,
                              Body=csv_buffer.getvalue())

关键修改说明:

  • 修正df的类型标注为pd.DataFrame,跳过无意义的DataFrame重构步骤。
  • 将quotechar改为双引号,匹配期望的输出格式。
  • 添加quoting=csv.QUOTE_MINIMAL,让pandas仅对包含逗号、换行符等特殊字符的字段添加引号,避免重复转义问题。
  • 确保导入csv模块,否则csv.QUOTE_MINIMAL会报错。

内容的提问来源于stack exchange,提问作者user9318576

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:27:30