提问者:小点点

如何轻松确定Boto 3 S3存储桶资源是否存在?


例如,我有这样的代码:

import boto3

s3 = boto3.resource('s3')

bucket = s3.Bucket('my-bucket-name')

# Does it exist???

共3个答案

匿名用户

在撰写本文时,没有高级方法可以快速检查存储桶是否存在并且您可以访问它,但您可以对HeadBucket操作进行低级调用。这是进行此检查的最便宜的方法:

from botocore.client import ClientError

try:
    s3.meta.client.head_bucket(Bucket=bucket.name)
except ClientError:
    # The bucket does not exist or you have no access.

或者,您也可以重复调用create_bucket。该操作是幂等的,因此它将创建或仅返回现有的存储桶,如果您正在检查存在性以知道是否应该创建存储桶,这很有用:

bucket = s3.create_bucket(Bucket='my-bucket-name')

和往常一样,一定要查看官方留档。

注意:在0.0.7版本之前,meta是一个Python字典。

匿名用户

我在这方面取得了成功:

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket-name')

if bucket.creation_date:
   print("The bucket exists")
else:
   print("The bucket does not exist")

匿名用户

正如@Daniel提到的,Boto3文档建议的最佳方法是使用head_bucket()

head_bucket()-此操作有助于确定存储桶是否存在并且您有权访问它。

如果您有少量的存储桶,您可以使用以下方法:

>>> import boto3
>>> s3 = boto3.resource('s3')
>>> s3.Bucket('Hello') in s3.buckets.all()
False
>>> s3.Bucket('some-docs') in s3.buckets.all()
True
>>>