2017-10-01 5 views
0

J'essaie d'obtenir la taille totale d'un compartiment. Cependant, total_size renvoie 0. Bien sûr, il y a quelques fichiers dans le compartiment. Si j'ai cinq fichiers dans mon compartiment, la fonction suivante imprime cinq zéros. Qu'est-ce que je fais mal?Impossible d'obtenir la taille totale d'un compartiment avec Boto3

bucket = boto3.resource('s3', config=Config(signature_version="s3", s3={'addressing_style': 'path'})).Bucket(name) 
for object in bucket.objects.all(): 
    total_size += object.size 
    print(object.size) 

Répondre

3

Je vois quelques problèmes:

  • pas sûr de votre appel à boto3.resource(). Est-ce exact?
  • total_size non initialisées

Essayez ceci:

total_size = 0 
bucket = boto3.resource('s3').Bucket('mybucket') 
for object in bucket.objects.all(): 
    total_size += object.size 
    print(object.size) 
print(total_size) 

Ou une seule ligne:

sum([object.size for object in boto3.resource('s3').Bucket('mybucket').objects.all()]) 
1

Change signature_version = "s3" à signature_version = "s3v4". J'aime aussi la réponse de HelloV.

Spécifiez également la région pour le compartiment au lieu de s'appuyer sur la configuration par défaut.

1

Une alternative plus simple consiste à utiliser Amazon S3 Inventory pour vider une liste d'objets sur une base quotidienne, puis calculer les totaux à partir de cela.