如何仅列出S3存储桶

时间:2017-12-07 07:58:01

标签: python amazon-s3 boto bucket

我在s3-bucket中有n个文件,我只想下载特定模式类型的文件w.r.t命名约定

代码:

BUCKET_NAME = "MYBucket"
s3_conn  = boto.connect_s3(AWS_keys)
bucket = s3_conn.get_bucket(BUCKET_NAME)

#goto through the list of files
bucket_list = bucket.list(prefix='Test_folder/OUT/abc_')

for l in bucket_list:
    key_string = str(l.key)
    s3_path = DOWNLOAD_LOCATION_PATH + key_string
    try:
       print ("Current File is ", s3_path)
       l.get_contents_to_filename(s3_path)
    except (OSError,S3ResponseError) as e:
         pass

以上代码仅适用于一种类型的文件命名,即: abc _

如果我想要包含以下模式的文件列表怎么办: abc_,axy_,xa_ya_zf_,gelnique _

有任何建议吗?

2 个答案:

答案 0 :(得分:0)

可以与前缀一起指定分隔符。 AWS S3从这两者构建公共前缀,并返回与公共前缀匹配的存储桶中的内容。

bucket_list = bucket.list(prefix='Test_folder/OUT/', delimiter='_')

公共前缀是从键的开头到前缀后指定的分隔符的第一次出现的子字符串。这不仅保证'Test_folder/OUT/abc_'之类的匹配,还保证'Test_folder/OUT/mydir/abc_'

答案 1 :(得分:0)

相反,这个Simple循环对我来说很好

pattern_list = ['abc_', 'axy_', 'xa_ya_zf_', 'gelnique_']
for p in pattern_list:
    prefix ='AB_Test/OUT/' + str(p)
    for k in src_bucket.list(prefix): 
          # Do your work!