¿Cómo puedo ver qué hay dentro de un cubo en S3 boto3
? (es decir, hacer un "ls"
)?
Haciendo lo siguiente:
import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some/path/')
devoluciones:
s3.Bucket(name='some/path/')
¿Cómo veo su contenido?
mybucket.objects.filter(Prefix='foo/bar')
y solo enumerará objetos con ese prefijo. También puedes pasar unDelimiter
parámetro.object
como nombre de variable, ya que sombreará el tipo globalobject
.Esto es similar a un 'ls' pero no tiene en cuenta la convención de carpeta de prefijo y enumerará los objetos en el depósito. Le corresponde al lector filtrar los prefijos que forman parte del nombre de la clave.
En Python 2:
En Python 3:
fuente
conn.list_objects(Bucket='bucket_name', Prefix='prefix_string')['Contents']
Supongo que ha configurado la autenticación por separado.
fuente
Si desea pasar las teclas ACCESS y SECRET (que no debe hacer, porque no es seguro):
fuente
Para manejar listados de claves grandes (es decir, cuando la lista del directorio es mayor a 1000 elementos), utilicé el siguiente código para acumular valores clave (es decir, nombres de archivos) con múltiples listados (gracias a Amelio anterior para las primeras líneas). El código es para python3:
fuente
Mi función de utilidad s3
keys
es esencialmente una versión optimizada de la respuesta de @ Hephaestus:En mis pruebas (boto3 1.9.84), es significativamente más rápido que el código equivalente (pero más simple):
Como S3 garantiza resultados ordenados binarios UTF-8 ,
start_after
se ha agregado una optimización a la primera función.fuente
list()
para devolver una lista de archivos.Una manera más parsimoniosa, en lugar de iterar a través de un bucle for, también podría imprimir el objeto original que contiene todos los archivos dentro de su cubo S3:
fuente
files_in_s3
es un "objeto de lista". No hay tal cosa en Python. Es más bien un iterable y no pude hacer que su código funcione y, por lo tanto, no se votó. Entonces encontré el error y vi su punto, pero no pude deshacer mi voto negativo.ObjectSummary:
Hay dos identificadores que se adjuntan a ObjectSummary:
boto3 S3: ObjectSummary
Más información sobre las claves de objeto de la documentación de AWS S3:
Aquí hay un código de ejemplo que muestra cómo obtener el nombre del depósito y la clave del objeto.
Ejemplo:
fuente
Simplemente lo hice así, incluido el método de autenticación:
fuente
fuente
ls
. ¿Cómo harías eso? Solo imprime los archivos en la raízCon una pequeña modificación al código de @Hephaeastus en uno de los comentarios anteriores, escribió el siguiente método para enumerar carpetas y objetos (archivos) en una ruta determinada. Funciona de manera similar al comando s3 ls.
Esto enumera todos los objetos / carpetas en una ruta determinada. Folder_path puede dejarse como Ninguno de forma predeterminada y el método enumerará los contenidos inmediatos de la raíz del depósito.
fuente
Aquí esta la solución
importar boto3
s3 = boto3.resource ('s3')
BUCKET_NAME = 'Su nombre del depósito de S3, por ejemplo,' eliminar datos de prueba11 ''
allFiles = s3.Bucket (BUCKET_NAME) .objects.all ()
para archivo en allFiles: print (file.key)
fuente
También se puede hacer de la siguiente manera:
fuente
Entonces estás pidiendo el equivalente de
aws s3 ls
en boto3. Esto sería una lista de todas las carpetas y archivos de nivel superior. Esto es lo más cerca que pude llegar; solo enumera todas las carpetas de nivel superior. Sorprendente lo difícil que es una operación tan simple.fuente