python-3.x - 将 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?
提前致谢。
解决方案
路径可以被视为对象的键。根据您的限制,您可能能够避免对 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)
推荐阅读
- javascript - 图像配准(对齐一张图像以匹配另一张图像)
- java - 如何在splunk通用转发器上做自己的加解密
- linux - 在 MacOS 终端中,是否可以返回上一个目录(多次)。(例如像 cd - 但要多次返回)
- javascript - 分页的跳转下一个/上一个图标
- php - 将 Doctrine SQL Query Builder (DBAL) 映射到类型的惯用方式是什么?
- java - 解析期间的 Http 失败(角度/java)
- symfony - 无法为 API 平台和 graphql 上的不可空字段返回 null
- java - Jersey Web 服务中的 Spring DI 中的 NPE
- r - 动态替换 R Shiny 数据表中的选项
- reactjs - 在 Typescript 中实现基于类型的特定行为