返回

使用 `boto3` 轻松列出 Amazon S3 存储桶的内容

python

使用 boto3 列出 S3 存储桶的内容

简介

boto3 是一个流行的 Python 库,用于与 Amazon Web Services (AWS) 交互。它为 S3(简单存储服务)提供了一系列功能强大的 API,使你能够轻松地管理和访问 S3 存储桶。本文将指导你如何使用 boto3 列出存储桶的内容,类似于 Unix 中的 ls 命令。

先决条件

  • Python 3.6 或更高版本
  • 安装了 boto3
  • 具有对目标 S3 存储桶的访问权限的 AWS 凭证

步骤

1. 导入 boto3

首先,导入 boto3 库:

import boto3

2. 建立 S3 资源

接下来,创建一个 S3 资源,它将允许你访问 S3 服务:

s3 = boto3.resource('s3')

3. 获取存储桶对象

现在,获取你想要列出内容的存储桶对象:

my_bucket = s3.Bucket('bucket-name')

bucket-name 替换为你自己的存储桶名称。

4. 列出存储桶内容

最后,遍历存储桶中的所有对象并打印它们的键(名称或路径):

for obj in my_bucket.objects.all():
    print(obj.key)

示例代码

以下是列出存储桶内容的完整代码示例:

import boto3

# 存储桶名称
bucket_name = 'my-bucket'

# 建立 S3 资源
s3 = boto3.resource('s3')

# 获取存储桶对象
my_bucket = s3.Bucket(bucket_name)

# 列出存储桶内容
for obj in my_bucket.objects.all():
    print(obj.key)

常见问题解答

1. 我可以在不指定存储桶名称的情况下列出所有存储桶吗?

是,你可以使用以下代码列出所有存储桶:

for bucket in s3.buckets.all():
    print(bucket.name)

2. 我可以过滤存储桶内容吗?

是的,你可以使用 filter 方法根据文件大小、前缀或其他元数据筛选对象。例如,以下代码列出文件大小大于 1MB 的所有对象:

for obj in my_bucket.objects.filter(SizeGreaterThan=1024 * 1024):
    print(obj.key)

3. 我可以仅获取存储桶中对象的名称吗?

是的,你可以使用 iter_objects 方法仅获取对象的名称:

for obj in my_bucket.objects.all():
    print(obj.key)

4. 我可以使用 boto3 从存储桶下载对象吗?

是的,你可以使用 download_file 方法从存储桶下载对象:

my_bucket.download_file('object-key', 'local-file-path')

5. 如何递归列出存储桶中嵌套文件夹中的所有文件?

你可以使用 prefix 参数递归列出存储桶中嵌套文件夹中的所有文件:

for obj in my_bucket.objects.filter(Prefix='folder/'):
    print(obj.key)

结论

使用 boto3 列出 S3 存储桶的内容非常简单。通过遵循这些步骤,你可以轻松地访问和管理 S3 中的文件。本文提供了所需的示例和常见问题解答,帮助你快速上手。