首页 > 解决方案 > 如何重用从AWS分配给s3返回对象的python变量

问题描述

我需要重用一个 python 变量来存储从 s3 get_object 调用返回的对象。下面是我的代码

def check_csv_format(s3_object):
    try:
       pd.read_csv(obj['Body'], header=None)
    except Exception as e:
       raise Exception(e)

obj = s3.get_object(bucket, key)
check_csv_format(obj)
df = pd.read_csv(obj['Body'])

但是当我运行这段代码时,它给出了以下错误。

pandas.errors.EmptyDataError: No columns to parse from file

我尝试使用 python deepcopy 来保留该对象的副本。但它没有用。请提出解决方案

标签: python-3.xamazon-web-servicesdataframeamazon-s3boto3

解决方案


返回的 dict 中的obj['Body']元素是StreamingBody。它不支持搜索或重新流式传输。如果您调用read()它不传递任何参数,那么您将读取所有数据。因此,如果您read()第二次调用,您将不再获得字节。

为什么不像这样简单地保存流对象:

csv_content = obj['Body'].read().decode('utf-8')

然后你可以csv_content根据需要传递给 Pandas。


推荐阅读