比如说我设置了以下存储桶:
bucketone
…/folderone
…/text1.txt
…/text2.txt
…/foldertwo
…/file1.json
…/folderthree
…/folderthreesub
…/file2.json
…/file3.json
但它只会降低一个级别。
在桶下检索信息的正确方法是什么?
一定会接受/ upvote回答。
答案 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