使用python和boto3删除S3对象时出现问题

时间:2019-02-07 16:44:38

标签: python amazon-s3 boto3

我正在尝试从AWS S3存储桶中删除不需要的文件,然后再将其转换为长期Glacier存储。我正在使用Pythonboto3运行以下脚本:

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错误代码。

有什么想法吗?

2 个答案:

答案 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.