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

Python无需pandas实现S3桶Excel文件读取后重新上传的问题求解

解决方案

问题根源

Excel(.xlsx)是二进制压缩格式文件,不属于文本文件,不需要做任何字符编码解码操作,你之前的解码操作会直接破坏文件的原始二进制结构,导致最终写入的文件无法正常打开。

可直接运行的正确代码

import boto3

# 初始化S3客户端
s3 = boto3.client('s3')
bucket = 'mybucket'
source_key = 'name of the file.xlsx'
# S3对象键使用正斜杠作为路径分隔符,不要用Windows风格的反斜杠
target_key = 'tmp/filename.xlsx'

# 直接读取二进制内容,无需解码
file_response = s3.get_object(Bucket=bucket, Key=source_key)

# 直接上传二进制流到目标路径,无需额外封装
s3.put_object(
    Body=file_response['Body'],
    Bucket=bucket,
    Key=target_key
)

如果需要对文件内容做二进制层面的修改,也可以先读取为字节对象再处理:

# 读取完整字节内容到内存
file_content = file_response['Body'].read()
# 这里可以插入二进制内容处理逻辑,不需要转文本
# 上传处理后的二进制内容
s3.put_object(
    Body=file_content,
    Bucket=bucket,
    Key=target_key
)

原有代码错误点说明

  • 对二进制格式的Excel文件调用decode方法做字符解码,直接破坏了文件原始结构,无论换什么编码都无法得到正确的文件内容
  • 错误使用StringIO存储内容,StringIO是文本处理专用的类,二进制内容需使用BytesIO,本场景下完全不需要额外封装IO对象
  • put_object调用参数格式错误,未显式指定Body、Key参数名,路径拼接使用了非法的反斜杠符号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:36:04