如何使用boto3在S3存储桶中获取顶级文件夹?

时间:2019-02-22 19:28:12

标签: python amazon-web-services amazon-s3 boto3

我有一个S3存储桶,其中包含一些顶级文件夹,并且每个文件夹中都有数百个文件。如何获取这些顶级文件夹的名称?

我尝试了以下方法:

s3 = boto3.resource('s3', region_name='us-west-2', endpoint_url='https://s3.us-west-2.amazonaws.com')
bucket = s3.Bucket('XXX')

for obj in bucket.objects.filter(Prefix='', Delimiter='/'):
    print obj.key

但这似乎不起作用。我曾考虑过使用正则表达式来过滤所有文件夹名称,但这似乎并不省时。

谢谢!

3 个答案:

答案 0 :(得分:3)

尝试一下。

import boto3

client = boto3.client('s3')
paginator = client.get_paginator('list_objects')
result = paginator.paginate(Bucket='my-bucket', Delimiter='/')
for prefix in result.search('CommonPrefixes'):
    print(prefix.get('Prefix'))

答案 1 :(得分:1)

  

Amazon S3数据模型是一个平面结构:创建一个存储桶,该存储桶存储对象。没有子桶或子文件夹的层次结构;但是,您可以像Amazon S3控制台(source)一样使用键名前缀和定界符来推断逻辑层次结构

换句话说,无法绕过存储桶中的所有键并提取想要查看的任何结构(取决于您的需求,dict-of-dicts对您来说是个好方法)。 / p>

答案 2 :(得分:0)

您还可以使用Amazon Athena来分析/查询S3存储桶。

https://aws.amazon.com/athena/