如何使用boto3删除AWS存储桶中的文件夹及其内容

2024-05-19 01:06:27 发布

您现在位置:Python中文网/ 问答频道 /正文

当谈到如何删除文件夹的内容时,documentation有点模棱两可。如果你看一下它是如何在boto3中完成的,键并没有在boto3的先行部分中定义,它只在boto2示例中定义。

删除文件夹内容的灵活(超过1000个文件)习惯用法是什么?


Tags: 文件文件夹示例内容定义documentationboto3习惯用法
2条回答

我认为你也不能在boto2中删除一个成语中的1000多个条目。但是,从boto3的角度来看,您可以尝试以下操作:

s3 = boto3.resource('s3')
bucket = s3.Bucket('bucket-name')
bucket.objects.filter(Prefix="path/to/dir").delete()

上面的东西已经过测试,正在工作

>>> import boto3
>>> s3 = boto3.resource('s3')
>>> b = s3.Bucket('MY_BUCKET_NAME')
>>> b.objects.filter(Prefix="test/stuff")
s3.Bucket.objectsCollection(s3.Bucket(name='MY_BUCKET_NAME'), s3.ObjectSummary)
>>> list(b.objects.filter(Prefix="test/stuff"))
[s3.ObjectSummary(bucket_name='MY_BUCKET_NAME', key=u'test/stuff/new')]
>>> b.objects.filter(Prefix="test/stuff").delete()
[{u'Deleted': [{u'Key': 'test/stuff/new'}], 'ResponseMetadata': {'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HostId': 'BASE64_ID_1', 'RequestId': 'REQ_ID', 'HTTPHeaders': {'x-amz-id-2': 'BASE64_ID_2', 'server': 'AmazonS3', 'transfer-encoding': 'chunked', 'connection': 'close', 'x-amz-request-id': 'REQ_ID', 'date': 'Fri, 12 May 2017 21:21:47 GMT', 'content-type': 'application/xml'}}}]
>>>

What's a flexible (more than a 1000 files) idiom that deletes the content of a folder?

没有。

S3中的主要资源是bucket中的对象(通过key标识)。

文件夹不是资源,也不是容器-- 它们是通过在对象键中存在/分隔符而创建的虚结构。(控制台可以创建的“空”文件夹只是一个零字节对象,其键以/结尾)。

因此,没有“删除文件夹及其所有内容”的习惯用法。甚至在控制台中实现这一点的能力也是通过向API发送delete或multi-object delete请求(限制为1000)。

生命周期策略还可用于删除具有给定密钥前缀的所有对象。这具有以天为单位的时间粒度,并且对象在创建后的指定天数内被删除,+1/-0天(它们可能比指定的实际时间长23:59:59,因为策略每天只计算一次,而不是实时计算)。

相关问题 更多 >

    热门问题