API 调用以使用 boto3 python 库从 aws 中的 s3 路径获取文件列表

API call to get the list of files from s3 path in aws using boto3 python library

我是aws的新手。我正在为以下场景寻找 python boto3 库 API 调用 aws。

  1. API 调用以使用 s3 路径获取文件列表
  2. API调用删除s3路径下的所有文件
  3. API 调用以检查给定的 s3 路径是否存在

如果有人可以帮助我,我将不胜感激。

“路径”(目录、文件夹)实际上并不存在于 Amazon S3 中。它使用平面(非分层)存储模型,其中每个对象的文件名 (Key) 包含对象的完整路径 .

但是,路径的大部分功能仍然是通过引用 Prefix 来提供的,它指的是密钥的第一部分。

例如,假设有一个对象的 Key 为:invoices/january/invoice.txt

它有一个前缀invoices/,还有一个前缀invoices/january/。前缀只是检查“密钥是否以此字符串开头?”

因此,您可以使用 s3 路径 获取文件列表:

import boto3

s3_resource = boto3.resource('s3')

for object in s3_resource.Bucket('my-bucket').objects.filter(Prefix='invoices/'):
    print(object.key)

或者,使用client方法:

import boto3

s3_client = boto3.client('s3')

response = s3_client.list_objects_v2(Bucket='my-bucket', Prefix='invoices/')

for object in response['Contents']:
    print(object['Key'])

删除 s3 路径下的所有文件,您需要使用上面的代码遍历每个对象,然后调用delete_object(). Alternatively, you could build a list of Keys to delete and then call delete_objects().

检查给定的 s3 路径是否存在,您可以调用 head_object()。请注意,这将适用于 对象 ,但不适用于“路径”,因为目录实际上并不存在。

但是,如果您在 Amazon S3 管理控制台中创建文件夹,会创建一个零长度对象,其中包含目录名称。这将使它“看起来”有一个目录,但这不是必需的。您可以在任何路径中创建对象而无需实际创建目录。他们只会“出现”。然后,当该目录中的所有对象都被删除时,该目录将不再显示。太神奇了!

另请参阅:Amazon S3 examples — Boto3 documentation