如何根据lambda处理程序中的后缀将文件复制到不同的存储桶

2024-09-28 22:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将csv文件复制到另一个存储桶中

我在AWS中有3个bucket a)test b)testjson c)testcsv

我已经上传data.json和data.csv到测试bucket

上传下面的文件后,事情发生了

  1. data.json文件被复制到testjson bucket

  2. data.csv文件被复制到testcsv bucket

  3. data.csv必须插入dynamodb

  4. data.json必须插入到dynamodb中

data.json

{
"emp_id": "3",
"Name" : "Madk"
"Company": "FB"
}

data.csv

emp_id,Name,Company
3,Madk,FB 

下面是将json放入dynamodb的第四个代码,该代码运行良好,我需要添加第1个、第2个和第3个

import json
import boto3

s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    json_filename = event['Records'][0]['s3']['object']['key']
    json_object = s3_client.get_object(Bucket=bucket,Key=json_filename)
    jsonFileReader = json_object['Body'].read()
    jsonDict = json.loads(jsonFileReader)
    table = dynamodb.Table('employees')
    table.put_item(Item=jsonDict)
    
    return 'file uploaded'
    #print (bucket,json_filename)

在这个lambda处理程序中,我只需要将.json复制到另一个bucket中,将.csv复制到另一个bucket中,我编写了将我的json添加到dynamodb中的代码,就像我需要将csv文件中的内容添加到dynamodb中一样


Tags: 文件csvclienteventjsondataobjects3
1条回答
网友
1楼 · 发布于 2024-09-28 22:24:55

这只是设计模式,实现您的逻辑并在遇到错误时发布

import json
import boto3

s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    filename = event['Records'][0]['s3']['object']['key']
    if(filename.split('.')[1].lower()=='json'):
        moveJSON(bucket,filename)
    elif(filename.split('.')[1].lower()=='csv'):
        moveCSV(bucket, filename)

def moveJSON(bucket, filename):
    #Implement your logic to move to test bucket
    #Implement your logic to move to testjson bucket
    #Below is your current logic to move to dynamodb
    json_object = s3_client.get_object(Bucket=bucket,Key=filename)
    jsonFileReader = json_object['Body'].read()
    jsonDict = json.loads(jsonFileReader)
    table = dynamodb.Table('employees')
    table.put_item(Item=jsonDict)    
    return 'file uploaded'

def moveCSV(bucket, filename):
    #Implement your logic to move to test bucket
    #Implement your logic to move to testcsv bucket
    #Implement your logic to move to dynamodb

相关问题 更多 >