当前位置: 首页 > 面试题库 >

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

段干祺
2023-03-14
问题内容

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

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

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


问题答案:

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(),然后在那里处理错误情况。



 类似资料:
  • 问题内容: 使用boto3,我可以访问我的AWS S3存储桶: 现在,存储桶包含文件夹,例如,文件夹本身包含多个带有时间戳的子文件夹。我需要知道这些子文件夹的名称来完成我正在做的另一项工作,我想知道是否可以让boto3为我检索这些子文件夹。 所以我尝试了: 它提供了一个字典,其键“目录”为我提供了所有第三级文件,而不是第二级时间戳目录,实际上,我得到了一个包含以下内容的列表: {u’ETag’:’

  • 问题内容: 我这样做是读取了S3存储桶中的文件名 现在,我需要获取文件的实际内容,类似于。什么是最好的方法? 问题答案: boto3提供了一种资源模型,该资源模型使诸如迭代对象之类的任务变得更加容易。不幸的是,StreamingBody不提供或。

  • 我想从桶S3下载一个图像并存储在变量中,而不是在我的本地电脑中,我怎么做? 我使用此代码存储在本地:

  • 我试图通过PartitionKey和RowKey从Azure表存储中检索一个实体。当我的表中确实有一个实体带有这些键时,这种方法非常有效。 但是,当没有找到带有for键的实体时,我只是收到一个相当不清楚的错误,说“其中一个请求输入无效”…… 未处理的拒绝存储错误:其中一个请求输入无效。 有没有办法检查特定分区和行密钥是否存在实体?

  • 问题内容: 我陷入一种情况,我需要检查嵌套JSON对象中是否存在密钥。通过嵌套的JSON对象,我在父JSON对象中具有一个JSON对象作为其键之一的值。所以我需要检查此密钥是否存在于整个JSON对象中。我将以下数据作为对象。我知道我可以解析此对象以获得JSON对象。 我已经使用方法来检查主要JSON对象中密钥的存在,并且它可以工作。但是对于检查任何内部JSON对象(例如“ info”),我需要再次

  • 我不熟悉shell脚本,我有一个用于导入cert和使用keytool导入keystore的脚本。此脚本位于Pod中,有时我必须重新启动Pod,有时当此脚本运行时,我会出现此错误 现有条目别名服务器存在,覆盖?[no]:输入新别名(返回以取消此条目的导入): 我知道有命令列出别名 它给出了输出 服务器,2022年6月22日,PrivateKeyEntry,证书指纹(SHA-256):AC:DC:12