python-3.x - 如何重用从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 来保留该对象的副本。但它没有用。请提出解决方案
解决方案
返回的 dict 中的obj['Body']
元素是StreamingBody。它不支持搜索或重新流式传输。如果您调用read()
它不传递任何参数,那么您将读取所有数据。因此,如果您read()
第二次调用,您将不再获得字节。
为什么不像这样简单地保存流对象:
csv_content = obj['Body'].read().decode('utf-8')
然后你可以csv_content
根据需要传递给 Pandas。
推荐阅读
- postgresql - 如何从 JSON-b 字段中获取项目
- javascript - HTML中是否有从另一个文件导入HTML代码的功能?
- docker - Docker 中的命名卷
- java - 为什么字段没有在第二种方法中更新?
- python - Python 3 中非常大的整数的 MemoryError vs OverflowError
- angular - Angular 9 自定义环境选项
- javascript - 在应用程序和 iframe 中的小部件之间共享身份验证状态(即通用登录)
- logging - 以编程方式从原始分析日志中提取用户流的最佳方法是什么?
- excel - 将 ADODB.Recordset 返回的单个值分配给变量的最快方法是什么?
- easynetq - 通过easynetq Advance api实现request/response