首页 > 解决方案 > 将 csv 文件输出到 S3 存储桶中的特定路径

问题描述

我编写了一个 Lambda 函数,该函数在创建 csv 文件时终止。我希望能够将该 csv 文件输出存储到我的 S3 存储桶的特定路径中。我理解S3没有传统意义上的文件系统,但是路径如下:

bucket-name/folder/file.csv

我可以将文件保存在 locationbucket-name/中,仅此而已。

复制代码

import pandas as pd  
import io 
from io import BytesIO
from io import StringIO
import boto3 


def lambda_handler(event, context):
    
    the_data = {'col1':['the','quick','brown','fox','jumped','over','the','lazy','dog'],
             'col2': 
['foo','bar','barfoo','oofarb','brafoo','barofo','forabo','broofa','borafa']}
    
    the_df = pd.DataFrame(the_data)
    
    
    bucket = 'bucket-name' 
    csv_buffer = StringIO()
    the_df.to_csv(csv_buffer)
    s3_resource = boto3.resource('s3')
    s3_resource.Object(bucket, 'file.csv').put(Body=csv_buffer.getvalue())

此外,是否有更好的方法来做到这一点,根本不需要 StringIO?

提前致谢。

标签: python-3.xpandasamazon-web-servicesamazon-s3boto3

解决方案


路径可以被视为对象的键。根据您的限制,您可能能够避免对 StringIO 和 Pandas 的依赖。重新组织的输入数据也可以简化事情。

the_data = {'col1':['the','quick','brown','fox','jumped','over','the','lazy','dog'],
             'col2': ['foo','bar','barfoo','oofarb','brafoo','barofo','forabo','broofa','borafa']}

keys = tuple(the_data)
rows = [keys] + list(zip(*[the_data[k] for k in keys]))
body = "\n".join([",".join(x) for x in rows])

s3_resource.Object(bucket, 'folder/file.csv').put(Body=body)

推荐阅读