使用python访问amazon s3 bucket子文件夹

时间:2017-11-09 06:03:06

标签: python amazon-s3 boto3

我正在尝试使用python的boto3访问一个bucket子文件夹。

问题是我无法在任何地方找到如何在boto代码中输入子文件夹信息。

我找到的只是如何放置存储桶名称,但我无法访问整个存储桶,只能访问特定的子文件夹。任何人都可以给我一个亮点吗?

到目前为止我做了什么:

 BUCKET = "folder/subfolder"
 conn = S3Connection(AWS_KEY, AWS_SECRET)
 bucket = conn.get_bucket(BUCKET)
 for key in bucket.list():
     print key.name.encode('utf-8')

错误消息:

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

我不需要使用boto进行操作,我只需要列出/获取此子文件夹中的文件。

P.S。:我可以通过路径folder/subfolder使用 cyberduck 来访问文件,这意味着我可以访问日期。

此致

以色列

2 个答案:

答案 0 :(得分:1)

尝试:

for obj in bucket.objects.filter(Prefix="your_subfolder"):
    do_something()

AWS实际上没有目录结构 - 它只是通过在名称中加入“/”来伪造一个。 Prefix选项将搜索限制为名称以给定前缀开头的所有对象,该对象应该是您的“子文件夹”。

答案 1 :(得分:1)

我使用类似的vtl建议修复了问题:

我必须把前缀放在我的桶和分隔符中。最终的代码是这样的:

objects = s3.list_objects(Bucket=bucketName, Prefix=bucketPath+'/', Delimiter='/')

正如他所说,没有文件夹结构,那么你必须说明一个分隔符,并像我一样把它放在 前缀 之后。

感谢您的回复。