python - 如何根据 lambda 处理程序中的后缀将文件复制到不同的存储桶
问题描述
如何将带有 csv 的文件复制到另一个存储桶中
我在 AWS 中有 3 个存储桶 a)test b)testjson c)testcsv
我已经上传 data.json 和 data.csv 到测试桶
上传文件后发生以下事情
data.json 文件被复制到 testjson 存储桶
data.csv 文件被复制到 testcsv 存储桶
data.csv 必须插入到 dynamodb
data.json 必须插入到 dynamodb
数据.json
{
"emp_id": "3",
"Name" : "Madk"
"Company": "FB"
}
数据.csv
emp_id,Name,Company
3,Madk,FB
下面是将json放入dynamodb的第4个代码,它工作正常,我需要添加第一个第二个和第三个
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 复制到另一个存储桶中并将 .csv 复制到另一个存储桶中,我编写了将我的 json 添加到 dynamodb 的代码,同样我需要将 csv 文件中的内容添加到 dynamodb
解决方案
这只是设计模式,实现您的逻辑并在您遇到错误时发布
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
推荐阅读
- ansible - 是否可以将 with_dict 与 with_items 结合使用?
- spring - 配置 Spring Security 5 Oauth 2 以使用 access_token uri 参数
- mysql - 将 sql 文件返回到 mysql 数据库时抑制警告
- php - 输入文件的表单编辑
- visual-studio - 创建或打开解决方案时出现 Visual Studio 2017 错误
- r - R正则表达式替换可变数量的周期之后的所有周期,前面有空格/行首
- outlook - 如何使用具有正确序列号的 ICS 更新 Outlook AppointmentItem?即如何确定序号?
- powerbi - 我们如何在 Switch 和 Format 函数中分配前缀字符
- android - 更新到 Android Studio 3.2 后构建失败
- visual-studio-code - 从没有 Gnome/KDE 的无头 linux 服务器运行 VS-Code / X11