使用Boto3嵌套密钥获取S3中文件的完整路径

时间:2017-08-09 22:01:31

标签: python amazon-web-services amazon-s3 boto3

我的水桶结构如下:

bucket
    production
        dt=2017-01-01
            file1.json
        ...
        dt=2017-05-01
            file2.json

我想要的是获取file1.json,file2.json的完整路径,以便我可以下载它们。

我很难做到这一点就是python。任何帮助表示赞赏。 TIA。

2 个答案:

答案 0 :(得分:8)

s3 = boto3.client('s3')

您可以通过调用list_objects

列出所有对象
objs = s3.list_objects(Bucket='mybucket')['Contents']

使用列表推导,获取忽略文件夹(大小为0)的对象名称

[obj['Key'] for obj in objs if obj['Size']]

s3 = boto3.resource('s3')
bucket = s3.Bucket('mybucket')
[key.key for key in bucket.objects.all() if key.size]

如果要列出具有特定前缀的对象:

# S3 list all keys with the prefix 'photos/'
s3 = boto3.resource('s3')
bucket = s3.Bucket('production')
  for obj in bucket.objects.filter(Prefix='2017-01-01/'):
    if obj.size: print obj.key

答案 1 :(得分:1)

当从Amazon S3检索到对象列表时,对象的Key始终是其完整路径:

import boto3
s3 = boto3.resource('s3')
for key in bucket.objects.all():
  print key.key

结果:

production/dt=2017-01-01/file1.json
production/dt=2017-01-01/file2.json
production/dt=2017-05-01/file1.json
production/dt=2017-05-01/file2.json