Nuestros mejores desarrolladores han agotado sus depósitos de café, por su búsqueda a tiempo completo por la solución, hasta que Alexandría halló el arreglo en Bitbucket así que en este momento la compartimos aquí.
Solución:
Lo que te perdiste es el hecho de que en GCS los objetos en un depósito no están organizados en una estructura/jerarquía de directorios similar a un sistema de archivos, sino en una estructura plana.
Puede encontrar una explicación más detallada en Cómo funcionan los subdirectorios (en el gsutil
contexto, truepero la razón fundamental es la misma: el espacio de nombres planos de GCS):
Gsutil proporciona la ilusión de un árbol de archivos jerárquicos sobre el espacio de nombre “plana” compatible con el servicio de almacenamiento de Google Cloud. Al servicio, el objeto GS: //your-bucket/abc/def.txt es solo un objeto que le sucede a “/” caracteres en su nombre. No existe un directorio “abc”; Sólo un solo objeto con el nombre dado.
Ya que no hay directorios (sub) directorios en GCS entonces /training/bad
Realmente no existe, por lo que no puede enumerar su contenido. Todo lo que puede hacer es enumerar todos los objetos en el cubo y seleccionar los nombres / rutas que comienzan con /training/bad
.
Si desea encontrar manchas (archivos) que existen bajo un determinado prefix (subdirectorio) puede especificar prefix
y delimiter
argumentos a la list_blobs()
función
Vea el siguiente ejemplo tomado del ejemplo de Google Listing Objects (también fragmento de GitHub)
def list_blobs_with_prefix(bucket_name, prefix, delimiter=None):
"""Lists all the blobs in the bucket that begin with the prefix.
This can be used to list all blobs in a "folder", e.g. "public/".
The delimiter argument can be used to restrict the results to only the
"files" in the given "folder". Without the delimiter, the entire tree under
the prefix is returned. For example, given these blobs:
/a/1.txt
/a/b/2.txt
If you just specify prefix = '/a', you'll get back:
/a/1.txt
/a/b/2.txt
However, if you specify prefix='/a' and delimiter='/', you'll get back:
/a/1.txt
"""
storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blobs = bucket.list_blobs(prefix=prefix, delimiter=delimiter)
print('Blobs:')
for blob in blobs:
print(blob.name)
if delimiter:
print('Prefixes:')
for prefix in blobs.prefixes:
print(prefix)
Si tienes alguna cuestión y disposición de acrecentar nuestro artículo puedes ejecutar una referencia y con mucho gusto lo analizaremos.