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

使用boto3+pandas读取S3中CSV文件遇空数据及文件未找到错误

解决boto3读取S3 CSV到Pandas时的空DataFrame/文件找不到错误

核心问题分析

  1. FileNotFoundError 原因:pd.read_csv() 接收的参数是文件路径、类文件对象或文件类迭代器,你直接传入解码后的字符串,会被当作文件路径解析,自然报错“找不到空路径的文件”。
  2. EmptyDataError 原因:botocore.response.StreamingBody 是一次性流对象,只能读取一次。如果你的代码中(或测试过程中)已经调用过 result['Body'].read(),第二次读取会返回空字节,导致Pandas解析不到数据。

正确解决方案

方案1:直接传递StreamingBody给read_csv

Pandas支持直接读取类文件对象,无需手动解码或转BytesIO,代码更简洁:

import boto3
import pandas as pd

client = boto3.client(
    's3',
    aws_access_key_id="xxx",
    aws_secret_access_key="xxx",
)

key = 'Dir/filename.csv' 
result = client.get_object(Bucket="buck-1", Key=key)

# 直接传递StreamingBody给read_csv
df = pd.read_csv(result['Body'])
print(df.head())

方案2:用BytesIO包装(确保只读取一次Body)

如果需要对字节流做预处理,先把流内容一次性读取保存,再传入BytesIO:

import boto3
import pandas as pd
import io

client = boto3.client(
    's3',
    aws_access_key_id="xxx",
    aws_secret_access_key="xxx",
)

key = 'Dir/filename.csv' 
result = client.get_object(Bucket="buck-1", Key=key)

# 一次性读取所有字节并保存
csv_bytes = result['Body'].read()
# 用BytesIO包装后传给read_csv
df = pd.read_csv(io.BytesIO(csv_bytes))
print(df.head())

额外排查点

  • 确认S3上的Dir/filename.csv确实有内容,不是空文件
  • 检查S3的Key是否正确:S3路径大小写敏感,确保目录和文件名完全匹配
  • 验证当前AWS账号对该S3对象有s3:GetObject权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:01:03