boto3でS3バケットのサブフォルダを取得

S3 はオブジェクトストレージであり、ファイルストレージとは異なり、ディレクトリのような階層構造がないです。

プレフィックスと区切り文字(/)を利用することで、キーを階層的に参照できる。

あるフォルダ内のサブフォルダを取得には、Prefix='folder/'Delimiter='/'を指定する。

例えば

import boto3

bucket = 'bucket-name'
folder_prefix = 'folder/'
client = boto3.client('s3')

resp = client.list_objects_v2(
    Bucket=bucket,
    Prefix=folder_prefix,
    Delimiter='/'
)
subfolders = [r.get('Prefix')
              for r in resp.get('CommonPrefixes')]

boto3.resource('s3')を使う場合は、なぜかDelimiter/を指定しても機能しないのです。

Tags:

Updated: