我想知道如何使用aws lambda(python)将文件从S3存储桶中的文件夹复制并移动到同一存储桶中的不同文件夹中?
答案 0 :(得分:4)
Amazon S3中没有移动或重命名命令。
相反,您可以将对象复制到新名称/位置,然后删除原始对象。
使用the boto3 copy_object()
command:
创建已存储在Amazon S3中的对象的副本。
目的地可以是同一个桶或不同的桶(甚至是不同地区的桶!)。
请注意,文件夹实际上并不存在于Amazon S3中。相反,对象的名称(' Key')包含完整路径和文件名。因此,将对象移动到另一个文件夹涉及使用不同的密钥(包括路径)保存它。
答案 1 :(得分:1)
我们可以使用以下函数移动包含子文件夹和文件的整个文件夹。
目标路径中将包含子文件夹和文件,就像在源文件夹中一样。
def move_folder_in_s3(bucket,source_folder,destination_path):
s3_bucket = boto3.resource('s3')
my_bucket = s3_bucket.Bucket(bucket)
s3 = boto3.client('s3')
for object_summary in my_bucket.objects.filter(Prefix=source_folder):
print(object_summary.key)
copy_source = {'Bucket': bucket,'Key': object_summary.key}
destination = destination_path + object_summary.key.split(source_folder,1)[1]
print(destination)
s3.copy_object(CopySource=copy_source, Bucket=bucket, Key=destination)
可以使用删除功能从源中删除文件夹。
def delete_folder_in_s3(bucket,folder):
s3_bucket = boto3.resource('s3')
my_bucket = s3_bucket.Bucket(bucket)
s3 = boto3.client('s3')
for object_summary in my_bucket.objects.filter(Prefix=folder):
print(object_summary.key)
s3.delete_object(Bucket = bucket, Key = object_summary.key)
s3.put_object(Bucket=bucket, Key=(folder+'/'))