【问题标题】:Access a amazon s3 bucket subfolder using python使用 python 访问 amazon s3 存储桶子文件夹
【发布时间】:2017-11-13 11:22:11
【问题描述】:

我正在尝试使用 python 的 boto3 访问存储桶子文件夹。

问题是我在任何地方都找不到如何在 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.:我可以使用 cyberduck 访问文件,方法是输入路径 folder/subfolder,这意味着我可以访问日期。

此致,

以色列

【问题讨论】:

  • 您的代码似乎适用于 Boto 2.x,而不是 Boto 3。
  • 你能告诉我在哪里可以找到使用 boto 3 访问子文件夹的信息吗?我没有在手册中找到它。 :(
  • 我对你的问题有点困惑。 “放入” 是什么意思“使用cyberduck 放入路径folder/subfolder?你把它放在哪里?

标签: python amazon-s3 boto3


【解决方案1】:

试试:

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

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

【讨论】:

  • boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
  • 我现在收到了这条消息
【解决方案2】:

我使用类似的 vtl 建议解决了这个问题:

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

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

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

感谢您的回复。

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多