因此,我需要下载所有上传到存储桶中存在的子文件夹的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'
答案 0 :(得分:1)
不幸的是,S3 没有功能来按后缀列出存储桶中的对象,例如.json
。唯一的方法是遍历客户端上的对象并以编程方式过滤它们。
您可以为此开始开发自己的python脚本。但这是一种常见的操作,以至于已经为此编写了许多食谱。可以在here中找到其中一些用于bash
和python
的文件。
这些解决方案非常适合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
结尾的存储桶中存在的任何数量的文件让我知道答案是否对您有帮助。它帮助了我。
谢谢