一尘不染

使用boto3检查s3中存储桶中是否存在密钥

python

我想知道boto3中是否存在密钥。我可以循环存储桶中的内容并检查密钥是否匹配。

但这似乎更长了,而且太过分了。Boto3官方文档明确说明了如何执行此操作。

可能是我缺少明显的东西。有人可以指出我如何实现这一目标。


阅读 261

收藏
2020-12-20

共1个答案

一尘不染

Boto
2的boto.s3.key.Key对象曾经有一种exists方法,该方法通过执行HEAD请求并查看结果来检查密钥是否在S3上存在,但似乎不再存在。您必须自己做:

import boto3
import botocore

s3 = boto3.resource('s3')

try:
    s3.Object('my-bucket', 'dootdoot.jpg').load()
except botocore.exceptions.ClientError as e:
    if e.response['Error']['Code'] == "404":
        # The object does not exist.
        ...
    else:
        # Something else has gone wrong.
        raise
else:
    # The object does exist.
    ...

load() 对单个键执行HEAD请求,这是快速的,即使有问题的对象很大或存储桶中有很多对象也是如此。

当然,您可能正在检查对象是否存在,因为您打算使用它。如果是这种情况,您只需将load()和忘掉,然后直接执行aget()download_file(),然后在那里处理错误情况。

2020-12-20