簡體   English   中英

如何在 Lambda 函數中讀取 S3 文件(在 python 中)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM