[英]how to copy files and folders from one S3 bucket to another S3 using python boto3
[英]Transfer files from one S3 bucket to another S3 bucket using python boto3
我想将文件从一个s3存储桶路径(例如B1/x/*
)传输到另一个S3存储桶(例如B2/y/*
),其中B1和B2是两个s3存储桶,x和y是其中包含csv的文件夹文件。
我已经写了下面的脚本来做到这一点。 但我收到错误“ object_list”未定义。 而且,我不确定它是否将执行文件传输的工作。
请参考以下脚本:
import boto3
s3 = boto3.client("s3")
# list_objects_v2() give more info
more_objects=True
found_token = True
while more_objects :
if found_token :
response= s3.list_objects_v2(
Bucket="B1",
Prefix="x/",
Delimiter="/")
else:
response= s3.list_objects_v2(
Bucket="B1",
ContinuationToken=found_token,
Prefix="x/",
Delimiter="/")
# use copy_object or copy_from
for source in object_list["Contents"]:
raw_name = source["Key"].split("/")[-1]
new_name = "new_structure/{}".format(raw_name)
s3.copy_from(CopySource='B1/x')
# Now check there is more objects to list
if "NextContinuationToken" in response:
found_token = response["NextContinuationToken"]
more_objects = True
else:
more_objects = False
如果有人可以帮助我在上述脚本中进行更改,这将非常有帮助。
谢谢
您可以使用下面的代码以分层的文件夹结构(如您的文件夹)将文件从一个存储桶传输到另一个存储桶。 在这里,您不必定义任何特定的键或文件夹结构,代码可以解决这一问题:
import boto3
s3 = boto3.resource('s3')
src_bucket = s3.Bucket('bucket_name')
dest_bucket = s3.Bucket('bucket_name')
dest_bucket.objects.all().delete() #this is optional clean bucket
for obj in src_bucket.objects.all():
s3.Object('dest_bucket', obj.key).put(Body=obj.get()["Body"].read())
如果要在移动文件后清除源存储桶,则可以在代码末尾使用src_bucket.objects.all().delete()
清理源存储桶。
如果您的脚本在本地服务器上运行,并且想要访问两个存储桶以将文件从一个s3存储桶传输到另一个存储桶,则可以按照以下代码进行操作。这将在“ bucket1”中创建文件副本到“ bucket2”中的“ sample”文件夹中。
import boto3
s3 = boto3.resource('s3')
src_bucket = s3.Bucket('bucket1')
dest_bucket = s3.Bucket('bucket2')
for obj in src_bucket.objects.all():
filename= obj.key.split('/')[-1]
dest_bucket.put_object(Key='sample/' + filename, Body=obj.get()["Body"].read())
我想从源存储桶中复制后删除文件,以下代码可以在复制后在循环内使用。
s3.Object(src_bucket, obj.key).delete()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.