我的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')
有人需要帮助提供准确的代码吗? 谢谢
答案 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)
更新了主要答案以反映我的观点。