首页 文章

如何使用python将流上传到AWS s3

提问于
浏览
1

我想创建lambda从S3获取zip文件(可能包含csv文件的列表),解压缩并上传回s3 . 由于lambda受内存/磁盘大小的限制,我必须从s3流回来并返回到它 . 我使用python(boto3)看下面的代码(我更像是一个java家伙,对python来说是新手......)

count = 0
obj = s3.Object( bucket_name, key )
buffer = io.BytesIO(obj.get()["Body"].read())
print (buffer)
z = zipfile.ZipFile(buffer)
for x in z.filelist:
    with z.open(x) as foo2:
        print(sys.getsizeof(foo2))
        line_counter = 0
        out_buffer = io.BytesIO()
        for f in foo2:
            out_buffer.write(f)
            # out_buffer.writelines(f)
            line_counter += 1
        print (line_counter)
        print foo2.name
        s3.Object( bucket_name, "output/"+foo2.name+"_output" ).upload_fileobj(out_buffer)
        out_buffer.close()
z.close()

结果是,在桶中创建空文件 . 例如:if file:input.zip包含文件:1.csv,2.csv我在桶中获取2个带有相应名称的空csv文件 . 此外,我不确定它确实流文件,或只是下载所有的zip文件谢谢

1 回答

  • -1

    在上传之前,您需要seek回到ByesIO文件的开头 .

    out_buffer = io.BytesIO()
    for f in foo2:
        out_buffer.write(f)
        # out_buffer.writelines(f)
        line_counter += 1
    
    out_buffer.seek(0) # Change stream position to beginning of file
    
    s3.Object( bucket_name, "output/"+foo2.name+"_output").upload_fileobj(out_buffer)
    out_buffer.close()
    

相关问题