我正在尝试从AWS S3存储桶中删除不需要的文件,然后再将其转换为长期Glacier存储。我正在使用Python
和boto3
运行以下脚本:
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket(<mybucketname>)
for obj in bucket.objects.all():
if '.DS_S' in obj.key or '.ini' in obj.key:
item_obj = s3.Object(obj.bucket_name, obj.key)
print(obj.key, item_obj.content_length)
del_resp = item_obj.delete()
print("Delete response for", obj.key, "is\n", del_resp)
根据documentation here-delete
方法应该返回3个结果的字典-但这是我从其中一个调用中看到的响应的示例-并非如此文档中的内容:
相机图片/数码照片/相机06-08 / .DS_Store 24580 删除对照相机照片/数码照片/照相机06-08 / .DS_Store的响应 {'ResponseMetadata':{'RequestId':'3B5CA1A9B0766A6B','HostId':'HDWyoQg + RNrRZRC3nvqD8kR4bKDuMkTqDf7a7gGSD0lRUvucg56W76hG0 + VP8BZ04o-Q's:'''' 'HDWyoQg + RNrRZRC3nvqD8kR4bKDuMkTqDf7a7gGSD0lRUvucg56W76hG0 + VP8BZ04oq + INsQUIY =','x-amz-request-id':'3B5CA1A9B0766A6B','date'::'7' },“ RetryAttempts”:0}}
该响应的http响应为204-因此它似乎在某种程度上已经成功-但当我查看S3存储桶时-该文件尚未删除。我没有收到任何Python错误代码。
有什么想法吗?
答案 0 :(得分:1)
似乎原始代码有效-但AWS S3实际花费了一些时间进行删除-我无法以其他任何方式解释我所看到的内容。我想要消失的文件现在消失了。
答案 1 :(得分:0)
item_obj = s3.Object(obj.bucket_name, obj.key)
是否不创建新对象?所以您不是要删除原始文件,而是要复制并删除副本?
在https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html的.object()
上
子资源是创建子代的新实例的方法 资源。该资源的标识符会传递给子级。 有关子资源的更多信息,请参考Resources Introduction Guide.