¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Objetos en S3: claves, prefijos y carpetas

Después de esta lección: Puedo encontrar archivos de un bucket por su prefijo.

Lección de 55 min5 comandosLaboratorio Cloud: practica con buckets S3, colas SQS y tablas DynamoDB desde la línea de comandos de AWS

Un acta entre miles de archivos

Una federación de fútbol sala guarda en un bucket de S3 un acta por partido, durante años. Hoy solo quieres las actas del 4 de octubre. Abrir miles de archivos es impensable.

S3 te deja pedir la lista de los archivos cuyo nombre empieza de cierta forma. Esta lección enseña a listar un bucket de S3 por prefijo.

Al final de esta lección

Nota

Puedo encontrar archivos de un bucket por su prefijo.

Palabras clave

PalabraQué significaEjemplo
Objetoun archivo guardado con sus datos
Claveel nombre completo de un objeto en un bucketactas/2026-10-04/liga.txt
Prefijoel comienzo de una clave
Delimitadorun carácter que parte una clave en niveles/
Prefijo comúnun comienzo parecido a una carpeta que comparten varias claves

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un bucket guarda objetos con clave

Un bucket guarda objetos. Un objeto son los bytes de un archivo más datos como su tamaño. Cada objeto tiene una clave, su nombre completo, y con ella lo encuentras.

Dentro no hay un árbol de carpetas. El bucket es una lista plana de claves. Una clave como actas/2026-10-04/liga.txt es solo un nombre largo que contiene barras.

Leer un listado

Código: python
answer = {
    "Name": "federacion-actas",
    "Prefix": "",
    "KeyCount": 4,
    "IsTruncated": False,
    "Contents": [
        {"Key": "actas/2026-10-04/liga.txt", "Size": 21, "StorageClass": "STANDARD"},
        {"Key": "actas/2026-10-11/liga.txt", "Size": 8, "StorageClass": "STANDARD"},
        {"Key": "escudos/rayo.png", "Size": 6, "StorageClass": "STANDARD"},
        {"Key": "reglas.txt", "Size": 9, "StorageClass": "STANDARD"},
    ],
}
for item in answer["Contents"]:
    print(item["Key"], item["Size"])
# Suma el Size de todos los objetos y muestra el total.

Un error frecuente

Advertencia

Mucha gente cree que un bucket de S3 tiene carpetas de verdad. No las tiene. La barra es solo un carácter de la clave. Una carpeta aparece en un listado porque varias claves empiezan igual, y desaparece cuando se borra su último objeto.

Un prefijo lista las claves que empiezan así

Al listar un bucket puedes pasar un prefijo. S3 devuelve entonces solo las claves que empiezan con él. El prefijo actas/2026-10-04/ encuentra un día de actas y nada más.

Filtra S3, así que tu código nunca tiene que leer todo el bucket. La respuesta repite el prefijo que enviaste y cuenta las claves halladas en KeyCount.

Filtrar claves por prefijo

Código: python
keys = [
    "actas/2026-10-04/liga.txt",
    "actas/2026-10-04/copa.txt",
    "actas/2026-10-11/liga.txt",
    "escudos/rayo.png",
    "reglas.txt",
]
prefix = "actas/2026-10-04/"
found = []
for key in keys:
    if key.startswith(prefix):
        found.append(key)
print("KeyCount:", len(found))
print(found)
# Cambia prefix a "actas/" y pulsa Run. ¿Cuántas claves salen ahora?

Un delimitador agrupa claves en carpetas

Imagina que quieres las carpetas que hay justo debajo de actas/, no todos los archivos. Pasa el delimitador / además del prefijo. S3 corta cada clave en la primera barra que sigue al prefijo.

Las claves con el mismo corte salen una sola vez, como un prefijo común, en CommonPrefixes. Las claves sin barra después del prefijo vuelven en Contents como antes.

Buscar las carpetas bajo actas/

Código: python
keys = [
    "actas/2026-10-04/liga.txt",
    "actas/2026-10-04/copa.txt",
    "actas/2026-10-11/liga.txt",
]
prefix = "actas/"
common = []
for key in keys:
    rest = key[len(prefix):]
    slash = rest.find("/")
    if slash != -1:
        folder = prefix + rest[:slash + 1]
        if folder not in common:
            common.append(folder)
prefixes = []
for one in common:
    prefixes.append({"Prefix": one})
answer = {"Prefix": prefix, "Delimiter": "/", "CommonPrefixes": prefixes}
print(answer)
# Añade a keys la clave "actas/2026-10-18/liga.txt". Ejecuta otra vez.

Una clave ausente responde de dos formas

Pedir un objeto que no está es un error. Pero las dos llamadas se distinguen. get_object responde con el Code NoSuchKey. head_object, que solo pide los datos, no tiene cuerpo donde poner un nombre, así que su Code es "404".

Las dos tienen el estado 404. Comprueba el estado cuando quieras cubrir las dos.

Pruébalo en el laboratorio de nube

El laboratorio de nube es una copia de práctica de S3, SQS y DynamoDB. Pulsa Iniciar el laboratorio en la barra y luego Ejecutar en cada orden de abajo. Usan la línea de comandos real de AWS, así que las mismas palabras sirven en una cuenta real. Las dos últimas órdenes muestran un listado con la carpeta logs/2026-10-01/ en CommonPrefixes, y luego el error NoSuchKey. Este paso es para practicar. La tarea de abajo sigue siendo Python simple, así que puedes hacerla sin el laboratorio.

Pon una clave inventada y la dirección

Comando
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=us-east-1 AWS_ENDPOINT_URL=http://cloud:4566

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Crea un bucket

Comando
aws s3 mb s3://prefix-lab

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Guarda un objeto bajo una clave con barras

Comando
aws s3 cp /etc/hostname s3://prefix-lab/logs/2026-10-01/web.log

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lista con un prefijo y un delimitador

Comando
aws s3api list-objects-v2 --bucket prefix-lab --prefix logs/ --delimiter /

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Pide una clave que no existe

Comando
aws s3api get-object --bucket prefix-lab --key nothing.txt /dev/null

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sobre este laboratorio y su código: Laboratorio Cloud: practica con buckets S3, colas SQS y tablas DynamoDB desde la línea de comandos de AWS

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.