将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
解决方案
问题根源有两点:
- 函数参数类型标注错误,把
df标注为str后又转成DataFrame,导致原始数据格式混乱,触发不必要的引号转义。 - 配置的
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
相关产品推荐
相关产品推荐

