【问题标题】:Problem deleting S3 objects using python and boto3使用 python 和 boto3 删除 S3 对象的问题
【发布时间】:2019-07-01 20:36:26
【问题描述】:

我正在努力从 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 个结果的字典 - 但这是我从其中一个调用中看到的响应示例 - 这不是文档:

相机图片/Digi Pics/相机 06-08/.DS_Store 24580 删除相机图片/Digi Pics/Camera 06-08/.DS_Store 的响应是 {'ResponseMetadata': {'RequestId': '3B5CA1A9B0766A6B', 'HostId': 'HDWyoQg+RNrRZRC3nvqD8kR4bKDuMkTqDf7a7gGSD0lRUvucg56W76hG0+VP8BZ04oq+INsQUIY=', 'HTTPStatusCode': 204, '-id-HTTP2Headers':-z: 'HDWyoQg+RNrRZRC3nvqD8kR4bKDuMkTqDf7a7gGSD0lRUvucg56W76hG0+VP8BZ04oq+INsQUIY=','x-amz-request-id':'3B5CA1A9B0766A6B','日期':'星期四,2019年2月7日亚马逊格林威治标准时间16:00','服务器:'2 }, '重试次数': 0}}

响应的 http 响应为 204 - 因此它似乎以某种方式成功 - 但是当我查看 S3 存储桶时 - 该文件尚未被删除。我没有收到任何 Python 错误代码。

有什么想法吗?

【问题讨论】:

    标签: python amazon-s3 boto3


    【解决方案1】:

    似乎原始代码有效 - 但 AWS S3 实际执行删除操作需要一些时间 - 我无法以其他方式解释我所看到的内容。我想要的文件现在都没有了。

    【讨论】:

    • 大概用了多长时间?
    【解决方案2】:

    item_obj = s3.Object(obj.bucket_name, obj.key) 不会创建一个新对象吗?所以你不是删除原件,只是复制和删除副本?

    .object() 来自:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html

    子资源是创建子对象的新实例的方法 资源。该资源的标识符会传递给子项。 有关子资源的更多信息,请参阅Resources Introduction Guide.

    【讨论】:

    • 您对 Python 提出了一个很好的观点,并意识到何时使用对象或对象的副本。
    • 但我现在认为我的错误是认为删除操作会立即发生。我根据您的建议对代码进行了一些更改 - 但这次我想要删除的文件都不存在 - 既可以从代码中看到,也可以通过在 AWS 管理控制台中进行一些搜索来确认。所以看起来原始代码有效 - S3 只需要时间来实际执行删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2018-03-30
    • 2019-03-28
    相关资源
    最近更新 更多