2
votes

Comment obtenir des dossiers de premier niveau dans un compartiment S3 à l'aide de boto3?

J'ai un compartiment S3 avec quelques dossiers de niveau supérieur et des centaines de fichiers dans chacun de ces dossiers. Comment obtenir les noms de ces dossiers de premier niveau?

J'ai essayé ce qui suit:

s3 = boto3.resource('s3', region_name='us-west-2', endpoint_url='https://s3.us-west-2.amazonaws.com')
bucket = s3.Bucket('XXX')

for obj in bucket.objects.filter(Prefix='', Delimiter='/'):
    print obj.key

Mais cela ne semble pas fonctionner. J'ai pensé à utiliser regex pour filtrer tous les noms de dossier, mais cela ne me semble pas rentable.

Merci d'avance!


1 commentaires

Il semble que ce ne soit pas possible avec boto3 sans énumérer tout le seau.


3 Réponses :


1
votes

Le modèle de données Amazon S3 est une structure plate: vous créez un compartiment et le compartiment stocke des objets. Il n'y a pas de hiérarchie de sous-titres ou de sous-dossiers; cependant, vous pouvez déduire une hiérarchie logique à l'aide de préfixes et de délimiteurs de nom de clé comme le fait la console Amazon S3 ( source )

En d'autres termes, il est impossible d'itérer toutes les clés du bucket et d'extraire la structure que vous voulez voir (en fonction de vos besoins, un dict-of-dicts peut être une bonne approche pour vous).

/ p>


1 commentaires

Eh bien, mais lorsque vous vérifiez réellement la nouvelle interface utilisateur Web S3, ils répertorient des éléments comme des dossiers normaux. Je pense donc qu'AWS essaie de fournir cette fonction maintenant.



9
votes

Essayez ceci.

import boto3

client = boto3.client('s3')
paginator = client.get_paginator('list_objects')
result = paginator.paginate(Bucket='my-bucket', Delimiter='/')
for prefix in result.search('CommonPrefixes'):
    print(prefix.get('Prefix'))


1 commentaires

Cela a parfaitement fonctionné, vous voudrez peut-être attraper une exception au cas où un tel seau n'existerait pas



0
votes

Vous pouvez également utiliser Amazon Athena pour analyser / interroger les compartiments S3.

https://aws.amazon.com/athena/


0 commentaires