Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

879
Views
¿Cómo encontrar el tamaño de una carpeta dentro de un cubo S3?

Estoy usando el módulo boto3 en python para interactuar con S3 y actualmente puedo obtener el tamaño de cada clave individual en un depósito S3. Pero mi motivo es encontrar el espacio de almacenamiento de solo las carpetas de nivel superior (cada carpeta es un proyecto diferente) y debemos cobrar por proyecto por el espacio utilizado. Puedo obtener los nombres de las carpetas de nivel superior, pero no obtengo ningún detalle sobre el tamaño de las carpetas en la siguiente implementación. La siguiente es mi implementación para obtener los nombres de las carpetas de nivel superior.

 import boto import boto.s3.connection AWS_ACCESS_KEY_ID = "access_id" AWS_SECRET_ACCESS_KEY = "secret_access_key" Bucketname = 'Bucket-name' conn = boto.s3.connect_to_region('ap-south-1', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY, is_secure=True, # uncomment if you are not using ssl calling_format = boto.s3.connection.OrdinaryCallingFormat(), ) bucket = conn.get_bucket('bucket') folders = bucket.list("", "/") for folder in folders: print(folder.name)

El tipo de carpeta aquí es boto.s3.prefix.Prefix y no muestra ningún detalle de tamaño. ¿Hay alguna forma de buscar una carpeta/objeto en un depósito S3 por su nombre y luego obtener el tamaño de ese objeto?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Para obtener el tamaño de una carpeta S3, los objetos (accesibles en boto3.resource('s3').Bucket) proporcionan el filter(Prefix) que le permite recuperar SOLO los archivos que respetan la condición Prefijo, y hace está bastante optimizado.

 import boto3 def get_size(bucket, path): s3 = boto3.resource('s3') my_bucket = s3.Bucket(bucket) total_size = 0 for obj in my_bucket.objects.filter(Prefix=path): total_size = total_size + obj.size return total_size

Entonces, digamos que desea obtener el tamaño de la carpeta s3://my-bucket/my/path/ , luego llamaría a la función anterior así:

 get_size("my-bucket", "my/path/")

Entonces esto, por supuesto, también es fácilmente aplicable a las carpetas de nivel superior

over 4 years ago · Santiago Trujillo Report

0

Para encontrar el tamaño de las "carpetas" de nivel superior en S3 (S3 realmente no tiene un concepto de carpetas, pero muestra una estructura de carpetas en la interfaz de usuario), algo como esto funcionará:

 from boto3 import client conn = client('s3') top_level_folders = dict() for key in conn.list_objects(Bucket='kitsune-buildtest-production')['Contents']: folder = key['Key'].split('/')[0] print("Key %s in folder %s. %d bytes" % (key['Key'], folder, key['Size'])) if folder in top_level_folders: top_level_folders[folder] += key['Size'] else: top_level_folders[folder] = key['Size'] for folder, size in top_level_folders.items(): print("Folder: %s, size: %d" % (folder, size))
over 4 years ago · Santiago Trujillo Report

0

No uso boto3, solo aws cli, pero esta breve línea sirve para el propósito. Por lo general, pongo una cola -1 para obtener solo el tamaño de la carpeta de resumen. Sin embargo, puede ser un poco lento para carpetas que tienen muchos objetos.

aws s3 ls --summarize --human-readable --recursive s3://nombre-depósito/nombre-de-carpeta | cola -1

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!