使用python获取带有前缀的s3文件

时间:2018-08-29 08:15:59

标签: python amazon-s3

我的s3文件名是“ folder / filename.xml”。我想以'name.xml'结尾的文件

import boto3
s3 = boto3.resource('s3')
try:
fileobj = s3.Object('lcu-matillion',''folder/.*name.xml'').get()['Body']

data=fileobj.read()
except Exception:
  print('not found')    

有人需要帮助提供准确的代码吗? 谢谢

2 个答案:

答案 0 :(得分:1)

别忘了可能有多个与该通配符匹配的文件。

您将使用类似的内容:

import boto3

s3 = boto3.resource('s3', region_name='ap-southeast-2')

bucket = s3.Bucket('my-bucket')

objects = bucket.objects.all()

for object in objects:
  if object.key.startswith('folder-name/') and object.key.endswith('.txt'):
    object.download_file('/tmp/' + object.key)

答案 1 :(得分:1)

这是一个很旧的答案,我很遗憾已被接受的主要答案是一个非常糟糕且有潜在危险的答案。

这基本上列出了所有对象并将搜索带到客户端。在一个包含数千个对象(我猜大多数桶)的桶上,这太糟糕了。

您需要做的是使用 .filter() 而不是 .all()

s3 = boto3.resource('s3')
buc = s3.Bucket("twtalyser")
for s in buc.objects.filter(Prefix='my/desired/prefix'):
    print(s)

更新

更新了主要答案以反映我的观点。