Python-使用boto3在存储桶中存在的子文件夹中搜索多个文件

时间:2020-05-28 07:30:22

标签: python amazon-s3 boto3

因此,我需要下载所有上传到存储桶中存在的子文件夹的JSON文件。

有什么办法吗?

我尝试了以下方法:

for key in bucket_name.objects.filter(Prefix='report'):
        print key
        s3_client.download_file(key, bucket_name, '{}/{}'.format(current_directory, key)) 

我在执行此操作时遇到以下错误:

AttributeError: 'str' object has no attribute 'objects'

2 个答案:

答案 0 :(得分:1)

不幸的是,S3 没有功能来按后缀列出存储桶中的对象,例如.json。唯一的方法是遍历客户端上的对象并以编程方式过滤它们。

您可以为此开始开发自己的python脚本。但这是一种常见的操作,以至于已经为此编写了许多食谱。可以在here中找到其中一些用于bashpython的文件。

这些解决方案非常适合ad hoc分析。但是,如果您有很多文件并且必须定期搜索它们,则可能会很耗时。一种解决方案是使用S3 Inventory每天或弱地生成对象的csv 列表,然后让您的python使用生成的csv文件来识别感兴趣的文件

您甚至可以完全自动化此过程,因为当库存可用时您会收到通知,并触发lambda来过滤CSV文件。

答案 1 :(得分:0)

在列出存储桶中存在的文件时,我的输出为-

s3.ObjectSummary(bucket_name='', key=u'file_Searching_for')

尝试了多个选项后,我出现了以下代码-

def main():

    objs = bucket_name.objects.filter(Prefix=Prefix_name)

    for obj in objs:
        filename = obj.key
        if filename.endswith('.json'):
           <download the file if you want to> 

从上面的代码中,它将为您提供带有前缀的文件名,您可以分割并下载文件。 它将帮助您下载以.json

结尾的存储桶中存在的任何数量的文件

让我知道答案是否对您有帮助。它帮助了我。

谢谢