如何获取S3桶的信息?

时间:2017-03-21 23:04:19

标签: amazon-s3 boto boto3

比如说我设置了以下存储桶:

bucketone
…/folderone
    …/text1.txt
    …/text2.txt
…/foldertwo
    …/file1.json
…/folderthree
    …/folderthreesub
        …/file2.json
…/file3.json

但它只会降低一个级别。

在桶下检索信息的正确方法是什么?

一定会接受/ upvote回答。

2 个答案:

答案 0 :(得分:0)

与你认为它的工作方式相反,rsplit()实际上从左到右返回分割,即使它从右到左应用它。

因此,您实际上想要获取拆分的最后一个元素:

filename = obj['Key'].rsplit('/', 1)[-1]

请参阅:Python rsplit() documentation

另外,请注意可能通过控制台创建的“假装目录”。它们实际上是零长度文件,使文件夹出现在UI中。因此,在最后的斜杠后跳过没有名称的文件。

进行修复并按预期工作:

import boto3
import os

s3client = boto3.client('s3')

for obj in s3client.list_objects_v2(Bucket='my-bucket')['Contents']:
   filename = obj['Key'].rsplit('/', 1)[-1]
   localfiledir = os.path.join('/tmp', filename) 
   if filename != '':
      s3client.download_file('my-bucket', obj['Key'], localfiledir)

答案 1 :(得分:0)

从CLI执行此操作有什么问题?

aws s3 cp s3://bucketing . --recursive