我的桶結構如下:獲取S3完整路徑文件
bucket
production
dt=2017-01-01
file1.json
...
dt=2017-05-01
file2.json
什麼我希望做的是得到的完整路徑file1.json,file2.json,所以我可以下載它們。
我努力做到這一點是蟒蛇。任何幫助表示讚賞。 TIA。
我的桶結構如下:獲取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