【发布时间】:2019-09-28 17:24:52
【问题描述】:
有没有办法使用 Boto3 将数据来回传输到 AWS lambda? 我有一个工作代码,但将 CSV 数据加载到内存中处理它并将其放入 s3 对象中。我宁愿寻找一种使用 Boto3 从 S3 流式传输对象并将其流式传输回 S3 的方法。
import csv
import json
import boto3
def lambda_handler(event, context):
targetbucket = 'AWS_BUCKET_NAME'
csvkey = 'CSV_FILENAME.csv'
jsonkey = 'JSON_FILENAME.json'
s3 = boto3.resource('s3')
csv_object = s3.Object(targetbucket, csvkey)
csv_content = csv_object.get()['Body'].read().splitlines()
s3_client = boto3.client('s3')
result = []
for line in csv_content:
x = json.dumps(line.decode('utf-8')).split(',')
Name = str(x[0])
Title = str(x[1])
Age = str(x[2])
jsonData = '{ "Name": ' + Name + '"' + ',' \
+ ' "Title": ' + '"' + Title + '"' + ',' \
+ ' "Age": ' + '"' + Age + '"' + '}'
result.append(jsonData)
s3_client.put_object(
Bucket=targetbucket,
Body= str(result).replace("'",""),
Key=jsonkey
)
【问题讨论】:
-
你能告诉我们更多关于你的实际用例吗?例如,什么触发了转换作业?您是否希望在 S3 中放置新对象时执行此操作?您想转换文件的内容并以相同的名称将其存储回来,还是将其放在不同的地方? (这不会覆盖现有的输出文件吗?)您似乎希望从 CSV 转换为 JSON,对吗? (顺便说一句,您的代码在定义之前引用了
Name和Age。)如果您可以编辑您的问题以告诉我们您的实际目标,我们更有可能提供好的建议。跨度> -
您尝试过使用流 API 吗?
-
我最终使用了 smart_open。这里是 smart_open 的链接:github.com/RaRe-Technologies/smart_open
标签: json csv amazon-s3 aws-lambda boto3