Python - 使用boto3搜索存在于一个桶内的子文件夹中的多个文件。

问题描述 投票:0回答:1

所以我有一个需求,就是下载所有上传到bucket里面的子文件夹的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'

python amazon-s3 boto3
1个回答
1
投票

不幸的是,S3 没有一个功能 用一个后缀来列出一个桶中的对象,如 .json. 唯一的方法是在客户端迭代对象,并以编程方式进行过滤。

你可以开发 自己的python脚本 的,因为你已经开始了。但这是一个很常见的操作,以至于有 众多菜谱 已经写好的。其中一些为 bashpython 可见 此处.

这些解决方案适用于 ad hoc 分析。但如果你有很多文件,而且要经常搜索它们,这可能会很耗时。一个解决方案是使用 S3清单生成csv 列表,然后让你的python使用生成的csv文件来识别感兴趣的文件。

你甚至可以 全自动 这个过程,因为你可以得到通知,当库存是可用的,并触发lambda,将过滤csv文件。


0
投票

在列出 bucket 中存在的文件时,我得到的输出是--。

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结尾的文件。

如果答案对你有帮助,请告诉我。它帮助了我。

谅谅

© www.soinside.com 2019 - 2024. All rights reserved.