我想将文件从一个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
如果有人能帮我修改上面的脚本,那将非常有帮助。
谢谢
2条答案
按热度按时间ie3xauqp1#
你可以用下面的代码把文件从一个存储桶传输到另一个存储桶,在这里你不需要定义任何特定的键或文件夹结构,代码会处理这些:
如果要在文件移动后清除源存储桶,可以在代码末尾使用
src_bucket.objects.all().delete()
来清除源存储桶。xbp102n02#
如果您的脚本运行在本地服务器,并希望访问两个桶传输文件从一个s3桶到另一个,你可以按照下面的代码。这将创建一个副本的文件在“bucket1”到“sample”文件夹在“bucket2”。
如果你想在从源存储桶复制后删除文件,下面的代码可以在复制后的循环中使用。