所以我有一个需求,就是下载所有上传到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'
不幸的是,S3 没有一个功能 用一个后缀来列出一个桶中的对象,如 .json
. 唯一的方法是在客户端迭代对象,并以编程方式进行过滤。
你可以开发 自己的python脚本 的,因为你已经开始了。但这是一个很常见的操作,以至于有 众多菜谱 已经写好的。其中一些为 bash
和 python
可见 此处.
这些解决方案适用于 ad hoc
分析。但如果你有很多文件,而且要经常搜索它们,这可能会很耗时。一个解决方案是使用 S3清单 到 生成csv 列表,然后让你的python使用生成的csv文件来识别感兴趣的文件。
你甚至可以 全自动 这个过程,因为你可以得到通知,当库存是可用的,并触发lambda,将过滤csv文件。
在列出 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结尾的文件。
如果答案对你有帮助,请告诉我。它帮助了我。
谅谅