簡體   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