我想知道boto3中是否存在密钥。我可以循环存储桶中的内容并检查密钥是否匹配。
但这似乎更长了,而且太过分了。Boto3官方文档明确说明了如何执行此操作。
可能是我缺少明显的东西。有人可以指出我如何实现这一目标。
Boto 2的boto.s3.key.Key对象曾经有一种exists方法,该方法通过执行HEAD请求并查看结果来检查密钥是否在S3上存在,但似乎不再存在。您必须自己做:
boto.s3.key.Key
exists
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()
当然,您可能正在检查对象是否存在,因为您打算使用它。如果是这种情况,您只需将load()和忘掉,然后直接执行aget()或download_file(),然后在那里处理错误情况。
get()
download_file()