【问题标题】:List s3 files within folder lists only first folder files列出文件夹中的 s3 文件仅列出第一个文件夹文件
【发布时间】: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


【解决方案1】:

感谢@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多