如何获得正确的s3键?

时间:2015-03-31 17:51:42

标签: python amazon-s3 boto

我在测试目录中有一个包含数千个密钥的S3存储桶: 通过以下方式遍历每个键:

for key in bucket.list():
  print key.name

产量输出如:

“/ DIR2 / DIR2 /香蕉/ dir4 / file1的” “/ DIR1 / DIR2 /苹果/ dir4 / file2的”

问题是当我像这样迭代时,如果我想要的是具有“/ dir1 / dir2 / apple”的所有键的列表,则它非常慢。此外,如果没有符合此条件的键,则它非常慢,因为它似乎迭代所有键。

获取我想要的桶内密钥列表的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

docs

中查找delimiterprefix个参数
for files in bucket.get_all_keys(delimiter = '/', prefix = '/dir1/dir2/'):
    print files

虽然delimiter始终为/,但prefix可以设置为您喜欢的任何内容,具体取决于您要从中读取文件的位置

答案 1 :(得分:0)

from boto.s3.connection import S3Connection

conn = S3Connection()  # assumes your .boto is populated with keys

bucket = conn.get_bucket('bucketname')

theobjects = [key.name for key in bucket.get_all_keys() if     key.name.startswith('dir1/dir2/apple')]

print theobjects  # should return just the names in a list (unicode)

当然这假定它是初始前缀,如果你想搜索包含字符串,你需要升级到正则表达式(不确定str.find是否适合你)

import re
theobjects = [key.name for key in bucket.get_all_keys() if re.search('/dir1/dir2/apple', key.name)]