gpt4 book ai didi

python - 使用 python 中的 boto 将内容从一个路径递归复制到另一个 s3 存储桶

转载 作者:行者123 更新时间:2023-12-02 02:33:53 24 4
gpt4 key购买 nike

我无法找到任何解决方案来使用 python 中的 boto 将 s3 存储桶中的内容从一个存储桶重复复制到另一个存储桶中。

假设存储桶 B1 包含的关键结构如下:B1/x/*我想将所有对象从 B/x/* 等键递归复制到 B/y/*

最佳答案

S3 中没有“目录”。那些“/”分隔符只是对象名称的一部分,这就是 boto 没有这样的功能的原因。要么编写脚本来处理它,要么使用第三方工具。

AWS customerapps显示s3browser提供此类任意目录复制功能。典型的免费版本仅产生两个线程来移动文件,付费版本允许您指定更多线程并运行得更快。

或者您只需编写脚本并使用 s3.client.copy_object将文件复制到另一个名称,然后将其删除。例如

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="mybucket",
Prefix="B1/x/",
Delimiter="/")
else:
response= s3.list_objects_v2(
Bucket="mybucket",
ContinuationToken=found_token,
Prefix="B1/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_object(
....
)
# Now check there is more objects to list
if "NextContinuationToken" in response:
found_token = response["NextContinuationToken"]
more_objects = True
else:
more_objects = False

** 重要提示 ** :list_object 每个列表最多只返回 1000 个键,MaxKey 不会更改该限制。所以你必须使用list_objects_v2并检查NextContinuationToken是否返回,以确保是更多的对象,重复直到耗尽。

关于python - 使用 python 中的 boto 将内容从一个路径递归复制到另一个 s3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37178584/

24 4 0
文章推荐: python - django 搜索表单 UnboundLocalError at/
文章推荐: vue.js - 我如何使用 Vuelidate 来验证