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