Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打开流而不是将整个文件加载到Pyton lambda内部的内存中_Python_Python 3.x_Amazon Web Services_Aws Lambda - Fatal编程技术网

Python 如何打开流而不是将整个文件加载到Pyton 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 =

嗨,我是新来的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 = 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”之后,现在它工作得很好。听起来很有趣。