首页 > 解决方案 > 使用对象标签删除存储桶中的对象

问题描述

我基本上必须在 s3 存储桶中上传一些对象。完成后,我必须使用 put_object_tagging () 进行对象标记。现在我正在尝试根据这些标签过滤对象,以便我可以根据标签删除对象。我完全震惊了。

while j!=10:
  if j%2==0:
  response1 = client.put_object_tagging(
      Bucket='shivam1052061',
      Key='%d.txt' % (j),
      Tagging={
          'TagSet': [
              {
                  'Key': 'notdivby2',
                  'Value': '2no'
              },
          ]
       }
    )
 j=j+1

我为上述问题编写了一些逻辑,并在下面列出。但我不认为这是代码的优化版本。如果有人知道如何优化这个,请告诉。

    for key in bucket.objects.all():
var=key.key
response = client.get_object_tagging(
    Bucket='shivam1052061',
    Key=var,
)
tagK = response['TagSet'][0]['Key']
tagV = response['TagSet'][0]['Value']
print(tagK + " ")
print(tagV + " ")
if tagK == deltagK and tagV == deltagV:
  #  print("4-done" + " ")
    response3 = client.delete_object(
        Bucket='shivam1052061',
        Key=var
    )

标签: amazon-web-servicestagsboto3delete-file

解决方案


我认为这会奏效,

import boto3

s3 = boto3.client('s3')

contents = s3.list_objects(Bucket='shivam1052061').get('Contents')
delkeys = []

for content in contents:
    try:
        response = s3.get_object_tagging(
            Bucket='shivam1052061',
            Key=content.get('Key')
        )
        for tag in response.get('TagSet'):
            if tag.get('Key') == 'notdivby2' and tag.get('Value') == '2no':
            delkeys.append(key)
    except:
        pass

print(delkeys)

但这需要很多次。没有办法用标签自然地过滤对象,因此您可以调用对象列表并再次调用对象的每个标签,检查您想要的标签并获取delkeys要删除的标签。


推荐阅读