【发布时间】:2018-07-13 05:47:58
【问题描述】:
我有一个 S3 存储桶 bucket1,其中有一个文件夹为 test1。 test1 文件夹中有一堆文件夹 folder1、folder2、folder3。每个folderx 包含一堆文件。我想列出所有文件夹中的所有文件。所以列出文件夹 1 的文件,然后列出文件夹 2 的文件,依此类推。
s3_bucket --> test1
---> folder1
--->file1
--->file2
---> folder2
--->file1
--->file2
---> folder3
--->file1
--->file2
但是,对于我的代码,它只列出了文件夹 1 的文件。有人可以验证我的代码吗?
s3 = boto3.client('s3')
resp = s3.list_objects_v2(Bucket=s3_bucket, Prefix=s3_path)
for file in resp['Contents']:
key = file['Key']
print key
PAGINATION:不会遍历文件夹 2。 folder1 有 1000 个文件。
s3 = boto3.client('s3')
kwargs = {'Bucket': s3_bucket}
while True:
resp = s3.list_objects(Bucket=s3_bucket, Prefix=s3_path)
try:
contents = resp['Contents']
print(len(contents))
except KeyError:
return
for file in contents:
key = file['Key']
try:
kwargs['ContinuationToken'] = resp['NextContinuationToken']
except KeyError:
break
【问题讨论】:
-
非常适合我。请检查前缀是否正确
-
@anand 你能把你在我的案例中使用的前缀发给我吗?
-
也许你得到了一个分页的响应,还有更多可以使用
ContinuationToken检索? -
@Atihska 前缀是
test1/,如果您想要“test1”中的所有内容。您可能还需要一个分页器。 boto3.readthedocs.io/en/latest/guide/paginators.html -
现在这变成了关于分页的另一个问题。请阅读list_objects_v2 和examples 上的文档。这很简单。
标签: python-2.7 amazon-s3 boto3