如何使用 python 列出 S3 存储桶文件夹中的文件

how to list files from a S3 bucket folder using python

我试图列出存储桶中的所有文件。这是我的代码

import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('my_project')

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

有效。我得到所有文件的名称。但是,当我尝试对文件夹做同样的事情时,代码会引发错误

import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('my_project/data/') # add the folder name

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

这是错误:

botocore.exceptions.ParamValidationError: Parameter validation failed:

Invalid bucket name "carlos-cryptocurrency-research-project/data/": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" or be an ARN matching the regex "^arn:(aws).*:(s3|s3-object-lambda):[a-z\-0-9]*:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-.]{1,63}$|^arn:(aws).*:s3-outposts:[a-z\-0-9]+:[0-9]{12}:outpost[/:][a-zA-Z0-9\-]{1,63}[/:]accesspoint[/:][a-zA-Z0-9\-]{1,63}$"

我确定文件夹名称是正确的,我尝试用 Amazon 资源名称 (ARN) 和 S3 URI 替换它,但仍然出现错误。

您不能在 Bucket 构造函数中指定 prefix/folder。而是使用 client-level API 并像这样调用 list_objects_v2

import boto3

client = boto3.client('s3')

response = client.list_objects_v2(
    Bucket='my_bucket',
    Prefix='data/')

for content in response.get('Contents', []):
    print(content['Key'])

请注意,这将产生最多 1000 个 S3 对象。如果需要,您可以使用