Struktur ember saya adalah sebagai berikut:

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

Yang ingin saya lakukan adalah mendapatkan path lengkap ke file1.json, file2.json, sehingga saya dapat mengunduhnya.

Saya berjuang untuk melakukan ini adalah python. Bantuan apa pun dihargai. TIA.

4
mr-sk 10 Agustus 2017, 01:01

2 jawaban

Jawaban Terbaik
s3 = boto3.client('s3')

Anda dapat membuat daftar semua objek dengan memanggil list_objects

objs = s3.list_objects(Bucket='mybucket')['Contents']

Menggunakan pemahaman daftar, dapatkan nama objek mengabaikan folder (yang memiliki ukuran 0)

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

Atau:

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

Jika Anda ingin membuat daftar objek dengan awalan tertentu:

# 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
10
helloV 10 Agustus 2017, 01:13

Saat daftar objek diambil dari Amazon S3, kunci objek tersebut selalu jalur lengkapnya:

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

Hasil:

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
2
John Rotenstein 9 Agustus 2017, 22:33