[英]How to read a CSV file from s3 and write the content in RDS database table using python lambda function?
[英]How to read S3 file in Lambda function(in python)
我正在尝试从 S3 读取一个文件,其中存储了以下内容:
{"empID":{"n":"7"},"name":{"s":"NewEntry"}}
{"empID":{"n":"3"},"name":{"s":"manish"}}
{"empID":{"n":"2"},"name":{"s":"mandeep"}}
{"empID":{"n":"4"},"name":{"s":"Vikas"}}
{"empID":{"n":"1"},"name":{"s":"babbar"}}
我想遍历每个对象并对它们进行一些处理。
我正在参考这段代码:
import json
import boto3
s3_obj =boto3.client('s3')
s3_clientobj = s3_obj.get_object(Bucket='dane-fetterman-bucket', Key='mydata.json')
s3_clientdata = s3_clientobj['Body'].read().decode('utf-8')
print("printing s3_clientdata")
print(s3_clientdata)
print(type(s3_clientdata))
s3clientlist=json.loads(s3_clientdata)
print("json loaded data")
print(s3clientlist)
print(type(s3clientlist))
但文件中没有任何“Body”属性。 我可以得到一些积分来做想要的东西吗?
问题是该文件实际上在每一行都包含单独的 JSON,而不是一个完整的 JSON 对象本身。
因此,程序需要独立处理每一行:
import json
import boto3
s3_client = boto3.client('s3')
s3_clientobj = s3_client.get_object(Bucket='my-bucket', Key='mydata.json')
for line in s3_clientobj['Body'].iter_lines():
object = json.loads(line)
print(f"ID: {object['empID']['n']} Name: {object['name']['s']}")
或者,您可以将整个对象下载到磁盘,然后for line in open('file'):
语法中使用 normal for line in open('file'):
。
另请参阅:使用 boto 从 S3 逐行读取文件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.