Python 使用两个嵌套键获取S3中文件的完整路径

Python 使用两个嵌套键获取S3中文件的完整路径,python,amazon-web-services,amazon-s3,boto3,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。感谢您的帮助。蒂亚 s3 = boto3.client('s3') 您可以通过调用list\u object

我的桶结构如下:

bucket
    production
        dt=2017-01-01
            file1.json
        ...
        dt=2017-05-01
            file2.json
我想做的是获得file1.json、file2.json的完整路径,以便下载它们

我正在努力做到这一点,这是python。感谢您的帮助。蒂亚

s3 = boto3.client('s3')
您可以通过调用
list\u objects

objs = s3.list_objects(Bucket='mybucket')['Contents']
使用列表理解,获取忽略文件夹(大小为0)的对象名称

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

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

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

哦!忽略零长度文件的好方法!谢谢,但这会得到所有的文件,因为有分散的文件和其他我不想得到的目录…怎么做?@sk先生,请看我的更新。您可以对特定文件夹使用
filter
。如何列出嵌套目录而不是它们所拥有的文件?我想避免在这里列出其他文件。这将全部打印出来。如何将其限制为“dt”目录?使用
if
语句如何<代码>如果key.key.startswith('production/dt='):打印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