通过 Python Boto 访问 AWS S3 的键和值对象
我看了这个链接: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
环境变量来做这个,但你也可以直接在这个调用中指定凭证。