You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

S3存储桶子文件夹对象获取失败及桶名称格式匹配报错求助

S3存储桶子文件夹对象获取失败及桶名称格式匹配报错求助

嘿,我来帮你把这个问题掰扯清楚,分分钟解决!

首先说那个桶名格式的报错——你这完全是搞混了S3桶名和对象前缀的区别!S3的桶名是绝对不能包含斜杠/的,你输入的FirstLevelS3/SecondLevelS3/BucketSource里带了好几个斜杠,直接撞在了S3桶名的正则规则上,可不就报错了嘛。

而且这里得给你纠正一个常见误区:S3里根本没有真正的“文件夹”!那些在控制台里看起来像文件夹的路径,本质上都是对象键(也就是每个文件的唯一标识)的前缀。比如你说的FirstLevelS3/SecondLevelS3/,其实是指所有键开头带有这个字符串的对象,S3只是为了方便我们理解,才把它们展示成文件夹的样子。

那怎么正确获取这个“子文件夹”下的所有对象呢?很简单,保持桶名是正确的BucketSource,然后在获取对象的时候指定前缀参数就行,修改后的代码给你贴在下面:

import boto3

bucket_from = "BucketSource"
s3 = boto3.resource('s3')
src = s3.Bucket(bucket_from)

# 这里填你要筛选的“子文件夹”路径作为前缀
target_prefix = "FirstLevelS3/SecondLevelS3/"
for archive in src.objects.filter(Prefix=target_prefix):
    print(archive.key)

这样运行起来,就能精准捞到所有键以FirstLevelS3/SecondLevelS3/开头的对象,也就是你想要的“子文件夹”里的内容啦。

另外补充一句:你之前用src.objects.all()能列出桶里的对象,但没看到预期的“子文件夹”内容?其实不是没列出来,而是那些对象的键里包含了前缀路径,比如FirstLevelS3/SecondLevelS3/xxx.txt,只是你没注意到而已——毕竟S3里没有真正的文件夹实体,所有内容都是平级存储的对象。

备注:内容来源于stack exchange,提问作者Jim Macaulay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:43:07