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

Python保存CSV至S3存储桶时出现编码错误及实现问询

嘿,我来帮你搞定这个编码问题!先解决你当前的本地保存编码报错,再给你一个不用绕本地文件、直接把数据写入S3的方案(完全不用Pandas哦)。

解决CSV编码错误+直接上传S3的方案

一、先搞定本地保存的编码问题

你遇到的编码错误,大概率是因为保存文件时没指定正确的编码(比如UTF-8),或者数据里包含非ASCII字符导致的。试试这样修改你的代码:

import csv
import os
import boto3

# 你的原始数据
data = [[None, u'https://aaa.com/p/cat.do?tags=|5555|4444|8888&zzz;A=3', u'00.00.00.000, 00.00.00.000', u'25359725', u'2018-03-06 18:01:18', u'DC01F54GH8D.aa201', None, 1814498434, 765651, u'2018-03-12 18:01:18', 168, 0, u'2...']]

# 关键:指定UTF-8编码+处理特殊字符
local_file = "temp_data.csv"
with open(local_file, 'w', encoding='utf-8', newline='', errors='replace') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_ALL)
    writer.writerows(data)

# 上传到S3
s3 = boto3.client('s3')
s3.upload_file(local_file, '你的存储桶名称', 's3里的文件路径/data.csv')

# 删除本地临时文件
os.remove(local_file)

重点注意这几个细节:

  • 打开文件时明确指定encoding='utf-8',确保特殊字符能正确写入
  • 添加newline=''避免Windows系统下生成多余空行
  • errors='replace'可以自动替换无法编码的特殊字符,防止直接报错
  • csv.QUOTE_ALL把所有字段用引号包裹,避免带逗号的字段破坏CSV格式

二、更优解:直接写入S3,完全跳过本地文件

其实不用绕本地文件这一步,咱们可以直接在内存里生成CSV内容,然后上传到S3,既省磁盘空间又更高效:

import csv
import io
import boto3

data = [[None, u'https://aaa.com/p/cat.do?tags=|5555|4444|8888&zzz;A=3', u'00.00.00.000, 00.00.00.000', u'25359725', u'2018-03-06 18:01:18', u'DC01F54GH8D.aa201', None, 1814498434, 765651, u'2018-03-12 18:01:18', 168, 0, u'2...']]

# 在内存中生成CSV内容
output = io.StringIO()
writer = csv.writer(output, quoting=csv.QUOTE_ALL)
writer.writerows(data)
# 将指针移到内存流开头,准备读取内容
output.seek(0)

# 直接上传到S3
s3 = boto3.client('s3')
s3.put_object(
    Bucket='你的存储桶名称',
    Key='s3里的文件路径/data.csv',
    Body=output.getvalue(),
    ContentType='text/csv; charset=utf-8'
)

# 关闭内存流
output.close()

这样就彻底避免了本地文件的编码问题,全程在内存里处理,效率更高~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:29:10