获取S3完整路径文件
我的桶结构如下:获取S3完整路径文件
bucket
production
dt=2017-01-01
file1.json
...
dt=2017-05-01
file2.json
什么我希望做的是得到的完整路径file1.json,file2.json,所以我可以下载它们。
我努力做到这一点是蟒蛇。任何帮助表示赞赏。 TIA。
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
当对象的列表是从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
我想避免在这里有其他文件。这将全部打印出来。我如何限制它到“dt”目录? –
“if”语句如何? '如果key.key.startswith('production/dt ='):print key.key' –
是的,def也可以,谢谢。 –
噢!好的方法来忽略零长度的文件! –
谢谢,但这得到的所有文件,因为有分散的文件和其他目录,我不想得到...如何做到这一点? –
@ mr-sk看到我的更新。你可以使用'filter'作为特定的文件夹。 – helloV