Comment puis-je obtenir la taille d'une boto3 Collection?
La façon dont j'ai été l'aide est la transformation de la Collection dans une Liste de requête et de la longueur:
s3 = boto3.resource('s3')
bucket = s3.Bucket('my_bucket')
size = len(list(bucket.objects.all()))
Cependant, cette force la résolution de l'ensemble de la collection et évite les avantages de l'utilisation d'une Collection dans la première place. Est-il une meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Il n'existe aucun moyen pour obtenir le nombre de clés dans un seau sans faire une liste de tous les objets c'est une limitation de l'AWS S3 (voir https://forums.aws.amazon.com/thread.jspa?messageID=164220).
Obtenir l'Objet de Résumés (de la TÊTE) ne reçoit pas les données réelles devrait donc être relativement peu coûteux opération et si vous venez de jeter de la liste alors que vous pourriez faire:
Qui vous donnera le nombre d'objets sans la construction d'une liste.
D'emprunt à partir d'un question similaire, une option pour récupérer la liste complète des clés de l'objet à partir d'un seau + préfixe est d'utiliser la récursivité avec le list_objects_v2 méthode.
Cette méthode récursive de récupérer la liste des clés de l'objet, 1000 touches à la fois.
Chaque demande de
list_objects_v2
utilise leStartAfter
argument pour continuer la liste des clés après la dernière touche de la demande précédente.Pour mon cas d'utilisation, j'ai juste besoin de savoir si le dossier est vide ou pas.
Ce fut assez pour savoir si le dossier est vide. Note qu'un dossier, si créées manuellement dans le S3 console, peut compter comme une ressource elle-même. Dans ce cas, si la durée indiquée ci-dessus est supérieur à 1, alors le S3 "dossier" est vide.