aws s3 ls 的 boto3 等价物是啥?

Posted

技术标签:

【中文标题】aws s3 ls 的 boto3 等价物是啥?【英文标题】:What is the boto3 equivalent of aws s3 ls?aws s3 ls 的 boto3 等价物是什么? 【发布时间】:2022-01-04 19:17:59 【问题描述】:

我正在尝试使用 boto3 复制命令 aws s3 ls s3://bucket/prefix/。目前,我可以使用

抓取路径中的所有对象
s3 = boto3.client('s3')

bucket = "my-bucket"
prefix = "my-prefix"
paginator = s3.get_paginator('list_objects_v2')
page_iterator = paginator.paginate(Bucket=bucket, Prefix = prefix)

然后,我可以遍历 page_iterator 并手动重建该路径中的***目录。但是,由于路径中有大量对象,检索所有对象以重建此命令的结果对我来说大约需要 30 秒,而 AWS CLI 命令几乎是即时的。有没有更有效的方法来做到这一点?

【问题讨论】:

【参考方案1】:

您应该使用list_objects_v2Delimiter 选项将具有公共前缀的任何对象组合在一起。这基本上是 aws s3 ls 在没有 --recursive 开关的情况下所做的:

import boto3
s3 = boto3.client('s3')
bucket = "my-bucket"
prefix = "my-prefix"

paginator = s3.get_paginator('list_objects_v2')

# List all objects, group objects with a common prefix
for page in paginator.paginate(Bucket=bucket, Prefix=prefix, Delimiter="/"):
    # CommonPrefixes and Contents might not be included in a page if there
    # are no items, so use .get() to return an empty list in that case
    for cur in page.get("CommonPrefixes", []):
        print("<PRE> " + cur["Prefix"])
    for cur in page.get("Contents", []):
        print(cur["Size"], cur["Key"])

【讨论】:

以上是关于aws s3 ls 的 boto3 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

python s3 presigned_post aws boto3

S3 AWS 的 IAM 角色和密钥设置使用 boto3 访问两个不同的账户存储桶

使用 boto3 在两个 AWS S3 存储桶之间移动文件

AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到

AWS CLI 和 BOTO3 开发工具包(权限问题)

使用 Boto3 如何从 AWS s3 下载文件列表作为 zip 文件维护文件夹结构?