【发布时间】:2019-12-06 20:53:21
【问题描述】:
我有一个具有以下结构的 Amazon S3 存储桶:
bucket_name/level1/level2/level3/level4/..../somefilename1.txt, somefilename2.txt,... somefilename(n).txt
在根“文件夹”下可以有多个文件。
我只需要获取级别 1 和级别 2 的“文件夹”名称列表。我不需要钻过level2。换句话说,我只需要返回一个列表:bucket_name/level1/level2/ 名称。该列表可能超过 2000 项。
如果我使用:
s3_keys = s3_client.list_objects(Bucket=bucket, Prefix=prefix, Delimiter='/')
我成功获得了我要查找的列表,但仅限于 1000 条记录。
我用谷歌搜索,分页器似乎是一个选项:
keys = []
paginator = s3_client.get_paginator('list_objects')
operation_parameters = {'Bucket': bucket,
'Prefix': filepath}
page_iterator = paginator.paginate(**operation_parameters)
for page in page_iterator:
keys.append(page['Contents'])
但是这种分页器方法正在返回存储桶下的每个对象路径......这可能是数十万个对象路径。
我只需要前 2 级路径
请告知如何完成这项任务。谢谢。
示例目录结构:
my_bucket/machine1_id/part1_id/../../../..
my_bucket/machine1_id/part2_id/../../../..
.
.
my_bucket/machineN_id/part1_id/../../../..
my_bucket/machineN_id/part2_id/../../../..
.
.
my_bucket/machineN_id/part(n)_id/../../../..
.
.
my_bucket/Building1_id/Room1_size/.../../../..
my_bucket/Building1_id/Room2_size/.../../../..
.
.
my_bucket/BuildingN_id/Room1_size/.../../../..
my_bucket/BuildingN_id/Room2_size/.../../../..
.
.
my_bucket/BuildingN_id/RoomN_size/.../../../..
.
.
等等。我只对获取所有 my_bucket/1st_level/2n_level/ 的列表感兴趣,除此之外什么都没有。在我的情况下可以超过 2000 个项目
我正在寻找的返回字符串列表是这样的
[
"my_bucket/machine1_id/part1_id/",
"my_bucket/machine1_id/part2_id/",
.
.
"my_bucket/machineN_id/part1_id/",
"my_bucket/machineN_id/part2_id/",
.
.
"my_bucket/machineN_id/part(n)_id/",
.
.
"my_bucket/Building1_id/Room1_size/",
"my_bucket/Building1_id/Room2_size/",
.
.
"my_bucket/BuildingN_id/Room1_size/",
"my_bucket/BuildingN_id/Room2_size/",
.
.
"my_bucket/BuildingN_id/RoomN_size/",
.
.
]
【问题讨论】:
-
您能否澄清一下...您是要检索对象名称还是文件夹的名称?你想“进入”子文件夹吗?随意编辑您的问题并提供示例层次结构和您想要的输出列表。
标签: amazon-web-services amazon-s3 boto3