我在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 _
有任何建议吗?
答案 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!