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

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

我有一个带有几个顶级文件夹的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

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

提前致谢!

python amazon-web-services amazon-s3 boto3
3个回答
4
投票

试试这个。

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
投票

Amazon S3数据模型是扁平结构:您创建存储桶,存储桶存储对象。没有subbuckets或子文件夹的层次结构;但是,您可以使用键名称前缀和分隔符来推断逻辑层次结构,如Amazon S3控制台所做的那样(source

换句话说,没有办法迭代桶中的所有键并提取您想要查看的任何结构(根据您的需要,对于您来说,词典可能是一个很好的方法)。


0
投票

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

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

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