boto3を使用して、AWSS3バケットにアクセスできます。
s3 = boto3.resource( "s3")bucket = s3.Bucket( "my-bucket-name")
これで、バケットにはフォルダ first-level
が含まれ、そのフォルダ自体には、タイムスタンプで名前が付けられたいくつかのサブフォルダが含まれます(例: 1456753904534
)。私が行っている別の仕事のためにこれらのサブフォルダーの名前を知る必要があり、boto3にそれらを取得させることができるかどうか疑問に思います。
それで私は試しました:
objs =bucket.meta.client.list_objects(Bucket = "my-bucket-name")
これは辞書を提供し、そのキー「Contents」はすべての第3レベルを提供します第2レベルのタイムスタンプディレクトリの代わりにファイル、実際には次のようなものを含むリストを取得します
{u "ETag": "" etag ""、u "Key":第1レベル/ 1456753904534 / part-00014 "、u" LastModified ":datetime.datetime(2016、2、29、13、52、24、tzinfo = tzutc())、
u" Owner ":{u" DisplayName ":" owner "、u" ID ":" id "}、
u" Size ":size、u" StorageClass ":" storageclass "}
特定のファイルを確認できます、この場合、 part-00014
が取得されますが、ディレクトリの名前だけを取得したいのです。原則として、すべてのパスからディレクトリ名を削除できますが、醜くてgeに第3レベルですべてを取得するのに費用がかかる第2レベル!
for o inbucket.objects.filter(Delimiter = "/"):print(o.key)
しかし、フォルダが取得されません希望するレベルで。
これを解決する方法はありますか?