我有一个S3存储桶bucket1
,其中有一个文件夹为test1
。 test1
文件夹folder1
,folder2
,folder3
中有一堆文件夹。每个folderx
包含一堆文件。我想列出所有文件夹中的所有文件。因此,列出folder1的文件,然后列出folder2的文件,依此类推。
s3_bucket --> test1
---> folder1
--->file1
--->file2
---> folder2
--->file1
--->file2
---> folder3
--->file1
--->file2
但是用我的代码,它只列出folder1的文件。有人可以验证我的代码吗?
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
分页:不会迭代folder2。 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
答案 0 :(得分:0)
感谢所有@dmulter @Michael @anand的所有建议和指导。
这在s3路径为键的情况下有效(按unix术语,不包括存储桶的文件夹路径)。
s3 = boto3.resource('s3')
bucket = s3.Bucket(s3_bucket)
for obj in bucket.objects.filter(Prefix=s3_path):
key = obj.key