列出文件夹中的s3文件仅列出第一个文件夹文件

时间:2018-07-12 16:32:00

标签: python-2.7 amazon-s3 boto3

我有一个S3存储桶bucket1,其中有一个文件夹为test1test1文件夹folder1folder2folder3中有一堆文件夹。每个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

1 个答案:

答案 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