通过 Python Boto 访问 AWS S3 的键和值对象

1 投票
1 回答
572 浏览
提问于 2025-04-18 11:16

我看了这个链接:https://ceph.com/docs/master/radosgw/s3/python/

不过我想找一种方法,能在只知道部分密钥的情况下访问AWS S3。

比如我可能有这样的密钥:

myplace/yourplace/ourplace/size/color

我知道大小和颜色,那我该怎么只获取匹配的密钥呢?

我需要做类似这样的操作吗:

TheDesiredKeys
For k in all keys
     if key.split("/")[4] == desiredSize && key.split("/")[5] == desiredColor
         TheDesiredKeys.append(k)

然后去获取那些位置的所有对象?我原以为会有更简单的方法呢。

我还尝试过:

 bucket.list()

但是在所有的例子中,都是这样的:

 b - bucket.list()
 for key in b:
      doSomething

不过我希望能直接获取一个对象中的所有密钥。但是当我在调试器中查看bucket.list()时,没看到所有的密钥?

1 个回答

0

AWS S3的键是按字典顺序排列的

用前缀来查找一个键是非常简单的。

但是如果是后缀,或者说不是前缀的情况,你就得遍历所有的键。

如何使用前缀查找

boto文档中的 bucket.get_all_keys 提供了一个参数 prefix

>>> import boto
>>> con = boto.connect_s3()
>>> bucket_name="bucketname"
>>> bucket=con.get_bucket(bucket_name)
>>> keys = bucket.get_all_keys(prefix="region/cz/")
>>> for key in keys:
...     print key.name
...
region/cz/Prague.gif
region/cz/Ostrava.gif

注意:boto.connect_s3() 这个方法假设你已经配置好了系统,我使用 BOTO_CONFIG 环境变量来做这个,但你也可以直接在这个调用中指定凭证。

撰写回答