Utilizzando boto3, posso accedere al mio AWS S3 secchio:Recupero nomi sottocartelle nella S3 secchio da boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket-name')
Ora, il secchio contenente la cartella first-level
, che a sua volta contiene diverse sottocartelle denominate con un timestamp, per istanza 1456753904534
. Ho bisogno di conoscere il nome di queste sotto-cartelle per un altro lavoro che sto facendo e mi chiedo se potrei avere boto3 recuperarle per me.
Così ho provato:
objs = bucket.meta.client.list_objects(Bucket='my-bucket-name')
che dà un dizionario, la cui chiave 'Contenuto' mi dà tutti i file di terzo livello, invece delle directory timestamp di secondo livello, infatti ho ottenere una lista contenente le cose come
{u'ETag ': ' "ETAG"', u'Key': primo livello/1.456.753,904534 millions/part-00014' , u'LastModified ': datetime.datetime (2016, 2, 29 , 13, 52, 24, tzinfo = tzutc()),
u'Owner ': {u'DisplayName': 'owner', u'ID ': 'id'},
u'Size ': dimensione, u'StorageClass': 'Stoccaggio'}
si può vedere che i file specifici, in questo caso part-00014
vengono recuperati, mentre mi piacerebbe per ottenere il nome della directory da solo. In linea di principio potrei togliere il nome della directory da tutti i percorsi ma è brutto e costoso recuperare tutto al terzo livello per ottenere il secondo livello!
Ho anche provato qualcosa riferito here:
for o in bucket.objects.filter(Delimiter='/'):
print(o.key)
ma non ho ricevuto le cartelle al livello desiderato.
C'è un modo per risolvere questo?
Quindi stai dicendo che [questa] (https://github.com/boto/boto3/issues/134 # issuecomment-116766812) non funziona? Potresti postare cosa succede quando lo esegui? –
@JordonPhillips Ho provato le prime righe del link che hai inviato, che ho incollato qui, e ottengo i file di testo al primo livello del bucket e nessuna cartella. –
@mar tin Hai mai risolto questo problema. Sto affrontando un dilemma simile in cui ho bisogno del primo elemento in ogni sottocartella di bucket. –