如何使用适用于 Python 的 AWS 开发工具包递归列出 AWS S3 存储桶中的文件?

Bor*_*lis 9 python ls amazon-s3 amazon-web-services boto3

我正在尝试复制 AWS CLIls命令以递归地列出 AWS S3 存储桶中的文件。例如,我将使用以下命令递归列出“location2”存储桶中的所有文件。

aws s3 ls s3://location2 --recursive
Run Code Online (Sandbox Code Playgroud)

适用于 Python 的 AWS 开发工具包(即boto3)相当于什么aws s3 ls s3://location2 --recursive

wik*_*ier 6

您需要使用分页器

import boto3 

client = boto3.client("s3")
bucket = "my-bucket"
paginator = client.get_paginator('list_objects')
page_iterator = paginator.paginate(Bucket=bucket)
for page in page_iterator:
    for obj in page['Contents']:
        print(f"s3://{bucket}/{obj["Key"]}")
Run Code Online (Sandbox Code Playgroud)

  • 可能值得用 `list_objects_v2` 修改您的评论:-) 我在一个包含超过 2m 个对象的存储桶上运行它,差异大约快 5 倍。 (4认同)
  • 最后一行包含双引号内的双引号,我建议进行以下修改以切换为单引号: `print(f's3://{bucket}/{obj["Key"]}')` (3认同)

Shi*_*lts 3

使用 AWS 开发工具包时无需使用 --recursive 选项,因为它使用list_objects方法列出存储桶中的所有对象。

import boto3 
client = boto3.client('s3')
client.list_objects(Bucket='MyBucket')
Run Code Online (Sandbox Code Playgroud)

  • 您需要对连续令牌进行特殊处理,以递归地列出 S3 位置中的对象。您提供的代码列出了存储桶中的“所有对象”,假设数量少于 1,000 个(来自 S3 API 的列表调用中的最大结果大小) (5认同)