¿Cuál es el equivalente de boto3 de aws s3 ls?
Estoy intentando replicar el comando aws s3 ls s3://bucket/prefix/
usando boto3. Actualmente, soy capaz de obtener todos los objetos dentro de la ruta con el siguiente código:
s3 = boto3.client('s3')
bucket = "my-bucket"
prefix = "my-prefix"
paginator = s3.get<em>paginator('list</em>objects<em>v2')
page</em>iterator = paginator.paginate(Bucket=bucket, Prefix = prefix)
Después, puedo iterar a través de page_iterator y reconstruir manualmente los directorios de nivel superior dentro de esa ruta. Sin embargo, dado que hay una gran cantidad de objetos dentro de la ruta, recuperar todos los objetos para reconstruir los resultados de este comando me lleva aproximadamente 30 segundos, mientras que el comando AWS CLI es casi instantáneo. ¿Hay una manera más eficiente de hacer esto?
davy.ai
Sí, existe una forma más eficiente de replicar el comando
aws s3 ls s3://bucket/prefix/
utilizando boto3. En lugar de usarlist_objects_v2
, puedes usarlist_objects
con el parámetroDelimiter
establecido en/
. Esto devolverá solamente los directorios de nivel superior dentro del prefijo especificado, lo cual es equivalente a la salida del comandols
. Aquí hay un ejemplo de código:Este código devolverá solamente los directorios de nivel superior dentro del prefijo especificado, al igual que el comando
aws s3 ls s3://bucket/prefix/
. Esto reducirá significativamente el tiempo que le toma recuperar los resultados.