如何打开流而不是将整个文件加载到pyhton lambda内部的内存中

时间:2019-04-30 10:30:35

标签: python python-3.x amazon-web-services aws-lambda

嗨,我是lambda和python的新手。 我有一个用例来读取一个大文件的内容,比如说大于1 GB,然后逐行记录其内容。

我做了如下的lambda函数:

import boto3

def lambda_handler(event, context):
    """Read file from s3 on trigger."""
    s3 = boto3.resource('s3')
    file_obj = event['Records'][0]

    bucketname = str(file_obj['s3']['bucket']['name'])
    filename = str(file_obj['s3']['object']['key'])

    iterator = s3.Object(bucketname, filename).get()['Body'].iter_lines()
    for line in iterator:
        print(line)

    return 'Lambda executed successfully.'

但是它没有在日志中打印任何内容。

我认为s3.Object(bucketname, filename).get()['Body']正在尝试将整个文件加载到内存中。我的理解正确吗? 因为这对于小文件来说可以正常工作。

如果是,那么如何在不将文件完全加载到内存中的情况下将其作为流打开文件。

1 个答案:

答案 0 :(得分:0)

这对我有用

s3 = boto3.resource('s3')
obj = s3.Object(BUCKET, key)
for line in obj.get()['Body']._raw_stream:
    # do something with line