繁体   English   中英

AWS Lambda:如何读取 S3 存储桶中的 CSV 文件然后将其上传到另一个 S3 存储桶?

[英]AWS Lambda: How to read CSV files in S3 bucket then upload it to another S3 bucket?

我正在做一个项目,我从 S3 存储桶中读取文件并删除所有 NA 值,然后将它们上传到不同的 S3 存储桶。 我一直在看 Lambda 教程和示例代码,但我很难理解它是如何工作的。
我的目标是读取 S3 存储桶中的任何文件并使用 Lambda function,我删除所有 NA 值,然后将它们上传到不同的 S3 存储桶。 但我真的不明白发生了什么。 我阅读了文档,但对我理解并没有太大帮助。
如何使以下代码从 S3 存储桶中读取 CSV 文件,然后删除所有 NA 值,然后将它们上传到新的 S3 存储桶?

import json
import os
import boto3
import csv

def lambda_handler(event, context):
    
    for record in event['Records']:
        
        bucket = record['s3']['bucket']['name']
        file_key = record['s3']['object']['key']
        s3 = boto3.client('s3')
        
        csv_file = s3.get_object(Bucket=bucket, Key=file_key)
        csv_content = csv_file['Body'].read().split(b'\n')
        
        csv_data = csv.DictReader(csv_content)

任何指向文档或视频和建议的链接将不胜感激。

上传文件

def upload_file(file_name, bucket, object_name=None):
    """Upload a file to an S3 bucket

    :param file_name: File to upload
    :param bucket: Bucket to upload to
    :param object_name: S3 object name. If not specified then file_name is used
    :return: True if file was uploaded, else False
    """

    # If S3 object_name was not specified, use file_name
    if object_name is None:
        object_name = file_name

    # Upload the file
    s3_client = boto3.client('s3')
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
    except ClientError as e:
        logging.error(e)
        return False
    return True

s3 下载文件

import boto3
s3 = boto3.resource('s3')
s3.meta.client.download_file('mybucket', 'hello.txt', '/tmp/hello.txt')

现在您只需以您想要的任何方式进行这些调用并处理您的 csv 文件,然后您如何高效地处理和上传到 s3,这将是一个完全不同的主题。

这篇文章中有很多回答她如何使用 boto 将文件上传到 S3 存储桶中的目录

如果好奇,您也可以检查这个,给出一些如何处理更大文件的想法。

第 4 步:创建拆分输入数据的 Lambda function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM