python - 如何在某些后缀的s3中从一个存储桶复制到另一个存储桶
问题描述
我有 3 个桶1.commonfolder 2.jsonfolder 3.csvfolder
。
公共文件夹将同时包含 json 和 csv 文件
需要将所有 csv 文件复制到 csvfolder
需要将所有json文件复制到json文件夹
commonfolder
下面的代码是从如何复制之后获取所有文件
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
#List all the bucket names
response = s3.list_buckets()
for bucket in response['Buckets']:
print (bucket)
print(f'{bucket["Name"]}')
#Get the files of particular bucket
if bucket["Name"] == 'tests3json':
resp = s3.list_objects_v2(Bucket='commonfolder')
for obj in resp['Contents']:
files = obj['Key']
print(files)
if(filename.split('.')[1].lower()=='json'):
copyjson(bucket,filename)
#copyjson(jsonfolder,filename)
elif(filename.split('.')[1].lower()=='csv'):
copycsv(bucket, filename)
#copycsv(csvfolder,filename)
需要创建一个新函数 copyjson,copycsv 来完成这项工作
需要根据文件扩展名从 common-bucket 复制到 csv-bucket 或 json-bucket
解决方案
您可以检查以下代码:
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
source_bucket = s3.Bucket('01-commonfolder-231')
json_bucket = s3.Bucket('02-jsonfolder-3435')
csv_bucket = s3.Bucket('03-csvfolder-4552')
for object in source_bucket.objects.all():
#print(object)
if object.key.endswith('.json'):
print(f"{object.key} to json bucket")
copy_object = json_bucket.Object(object.key)
copy_object.copy({'Bucket': object.bucket_name,
'Key': object.key})
elif object.key.endswith('.csv'):
print(f"{object.key} to csv bucket")
copy_object = csv_bucket.Object(object.key)
copy_object.copy({'Bucket': object.bucket_name,
'Key': object.key})
我使用我自己的带有测试文件的示例存储桶对此进行了测试:
aaa.json to json bucket
bbbbb.csv to csv bucket
bbbbb.json to json bucket
hhhh.csv to csv bucket
推荐阅读
- python-2.7 - 无法将数据插入现有 BigQuery 表?
- android - 片段 null 必须是一个公共静态类,才能从运行应用程序的实例状态正确重新创建
- performance - <: Any in Julia 的表现
- webpack - 通过 Webpack 从包中排除文件
- spring-security - BCryptPasswordEncoder 中的自定义盐生成器
- javascript - 在固定小数位数后拆分有效负载
- node.js - 为每个 aws lambda api 获得不同的响应
- php - PHPMailer 不会发送包含不在上传文件夹中的附件的电子邮件(仅在生产中)
- c# - 移动刚体
- python - 如何根据条件替换列表中的多个元素?