我正在尝试将所有文件从一个s3子文件夹复制到同一存储桶中的另一个子文件夹,如果目标子文件夹不存在,则应在复制操作之前创建它。我想在boto3的帮助下做这件事。可以采取哪些步骤来做到这一点?要求:
桶名/子文件夹/文件bucketname/copysubfolder/
如果在从子文件夹复制所有文件时不存在复制子文件夹,则应创建第一个复制子文件夹;否则,如果存在复制子文件,则应直接复制。
我能够完成上面的要求,下面是代码。我已经用完了boto3。
import boto3
old_bucket_name = bucket_name
old_prefix = 'subfolder/full_load/'
new_bucket_name = 'bucket_name'
new_prefix = 'subfolder/tmp/'
s3 = boto3.resource('s3')
old_bucket = s3.Bucket(old_bucket_name)
new_bucket = s3.Bucket(new_bucket_name)
for obj in old_bucket.objects.filter(Prefix=old_prefix):
old_source = { 'Bucket': old_bucket_name,
'Key': obj.key}
# replace the prefix
new_key = obj.key.replace(old_prefix, new_prefix, 1)
new_obj = new_bucket.Object(new_key)
new_obj.copy(old_source)