Python 如何打开流而不是将整个文件加载到Pyton lambda内部的内存中
嗨,我是新来的lambda和python。 我有一个用例来读取一个大于1GB的大文件的内容,然后逐行记录它的内容 我制作了一个lambda函数,如下所示:Python 如何打开流而不是将整个文件加载到Pyton lambda内部的内存中,python,python-3.x,amazon-web-services,aws-lambda,Python,Python 3.x,Amazon Web Services,Aws Lambda,嗨,我是新来的lambda和python。 我有一个用例来读取一个大于1GB的大文件的内容,然后逐行记录它的内容 我制作了一个lambda函数,如下所示: import boto3 def lambda_handler(event, context): """Read file from s3 on trigger.""" s3 = boto3.resource('s3') file_obj = event['Records'][0] bucketname =
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']
正在尝试将整个文件加载到内存中。这是我的理解正确吗?
因为这适用于小文件。
如果是,那么如何在不将文件完全加载到内存中的情况下以流的形式打开文件。这对我来说很有用
s3 = boto3.resource('s3')
obj = s3.Object(BUCKET, key)
for line in obj.get()['Body']._raw_stream:
# do something with line
这是我的工作
s3 = boto3.resource('s3')
obj = s3.Object(BUCKET, key)
for line in obj.get()['Body']._raw_stream:
# do something with line
请提供您的活动understanding@soheshdoshi非常感谢你。你让我想到了事件的根源。我的lambda只在S3上监听put操作,但是更大的文件通过多部分上传而不是常规的put操作上传到S3。在配置lambda以侦听“多部分上载”后,现在它工作正常。听起来很有趣。请提供您的事件understanding@soheshdoshi非常感谢你。你让我想到了事件的根源。我的lambda只在S3上监听put操作,但是更大的文件通过多部分上传而不是常规的put操作上传到S3。在配置lambda来监听“multipartupload”之后,现在它工作得很好。听起来很有趣。