【问题标题】:How to read S3 file in Lambda function(in python)如何在 Lambda 函数中读取 S3 文件(在 python 中)
【发布时间】:2020-04-10 19:26:54
【问题描述】:

我正在尝试从 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))

但文件中没有任何“正文”属性。 我可以得到一些积分来做想要的事情吗?

【问题讨论】:

    标签: python json amazon-web-services amazon-s3 boto3


    【解决方案1】:

    问题在于该文件实际上在每一行都包含单独的 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'): 语法。

    另请参阅:Read a file line by line from S3 using boto?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-13
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      相关资源
      最近更新 更多