【问题标题】:Accessing a specific key in a s3 bucket using boto3使用 boto3 访问 s3 存储桶中的特定密钥
【发布时间】:2018-03-24 22:25:00
【问题描述】:

我正在尝试使用 boto3 访问我的 s3 存储桶中的特定对象以进行删除。

以下代码来自 boto3 文档。 https://boto3.readthedocs.io/en/latest/guide/migrations3.html#accessing-a-bucket

# Boto 3
for key in bucket.objects.all():
    key.delete()

很好,但我宁愿有一个字典引用,然后遍历对象。这在扩展方面并不是最好的。

有没有办法使用它的键来抓取一个对象?

编辑:

我尝试了这个,但没有奏效。查看对象集合管理器。

s3 = boto3.resource('s3')
bucket = s3.Bucket(AWS_UPLOAD_BUCKET)
key = bucket.objects.get(key = venueobjects3key)

【问题讨论】:

    标签: amazon-s3 boto3


    【解决方案1】:

    使用下面的代码我认为它会帮助你

    S3 = boto3.client(
        's3',
        region_name = 'us-west-2',
        aws_access_key_id = AWS_ACCESS_KEY_ID,
        aws_secret_access_key = AWS_SECRET_ACCESS_KEY
    )
    #Create a file object using the bucket and object key. 
    fileobj = S3.get_object(
        Bucket=<Bucket_Name>,
        Key=<Key_Name>
        ) 
    # open the file object and read it into the variable filedata. 
    fileData = fileobj['Body'].read()
    print(fileData)
    

    【讨论】:

      【解决方案2】:

      看起来这是不可能的。这是过滤代码。我更容易遍历键并找到我想要的键。跛脚。

      过滤 一些集合支持额外的参数来过滤返回的数据集,这些参数被传递到底层服务操作中。使用 filter() 方法过滤结果:

      # S3 list all keys with the prefix 'photos/'
      s3 = boto3.resource('s3')
      for bucket in s3.buckets.all():
          for obj in bucket.objects.filter(Prefix='photos/'):
              print('{0}:{1}'.format(bucket.name, obj.key))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        相关资源
        最近更新 更多