gpt4 book ai didi

python - 如何删除开头为的 S3 文件

转载 作者:太空狗 更新时间:2023-10-29 21:26:42 26 4
gpt4 key购买 nike

假设我在 S3 上有不同尺寸的图像:

137ff24f-02c9-4656-9d77-5e761d76a273.webp
137ff24f-02c9-4656-9d77-5e761d76a273_500_300.webp
137ff24f-02c9-4656-9d77-5e761d76a273_400_280.webp

我正在使用 boto 删除单个文件:

bucket = get_s3_bucket()
s3_key = Key(bucket)
s3_key.key = '137ff24f-02c9-4656-9d77-5e761d76a273.webp'
bucket.delete_key(s3_key)

但我想删除所有以 137ff24f-02c9-4656-9d77-5e761d76a273 开头的 key 。

请记住,存储桶中可能有数百个文件,因此我不想遍历所有文件。有没有办法只删除以特定字符串开头的文件?

也许一些正则表达式删除功能。

最佳答案

S3 服务支持多重删除操作,允许您在单个 API 调用中删除多达 1000 个对象。但是,此 API 调用不支持服务器端 key 过滤。您必须提供要删除的 key 列表。

你可以自己动手。首先,您需要获取要删除的所有键的列表。

import boto

s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket')
to_delete = list(bucket.list(prefix='137ff24f-02c9-4656-9d77-5e761d76a273'))

list 调用返回一个生成器,但我正在使用 list 将其转换为列表,因此,to_delete 变量现在指向列表存储桶中与我提供的前缀匹配的所有对象。

现在,我们需要从大列表中创建最多 1000 个对象的 block ,并使用该 block 调用存储桶对象的 delete_keys 方法。

for chunk in [to_delete[i:i+1000] for i in range(0, len(to_delete), 1000)]:
result = bucket.delete_keys(chunk)
if result.errors:
print('The following errors occurred')
for error in result.errors:
print(error)

有更有效的方法可以做到这一点(例如,无需将桶生成器转换为列表),您可能想在处理错误时做一些不同的事情,但这应该给您一个开始。

关于python - 如何删除开头为的 S3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com