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に/を指定しても機能しないのです。