如何使用 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 对象。如果需要,您可以使用 。
我试图列出存储桶中的所有文件。这是我的代码
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 对象。如果需要,您可以使用