Tengo un script de python que obtiene una lista de archivos que se han cargado en un depósito de almacenamiento en la nube de Google e intenta recuperar los datos como una cadena.
El código es simplemente:
file = open(base_dir + "/" + path, 'wb') data = Blob(path, bucket).download_as_string() file.write(data)Mi problema es que los datos que he subido se almacenan dentro de carpetas en el depósito, por lo que la ruta sería algo así como:
folder/innerfolder/file.jpgCuando la biblioteca de Google intenta descargar el archivo, lo obtiene en forma de solicitud GET, que convierte la ruta anterior en:
https://www.googleapis.com/storage/v1/b/bucket/o/folder%2Finnerfolder%2Ffile.jpg¿Hay alguna forma de evitar que esto suceda o de descargar el archivo de esta manera? Salud.
Sí, puede hacerlo con la biblioteca de cliente de almacenamiento de python.
Simplemente instálelo con pip install --upgrade google-cloud-storage y luego use el siguiente código:
from google.cloud import storage # Initialise a client storage_client = storage.Client("[Your project name here]") # Create a bucket object for our bucket bucket = storage_client.get_bucket(bucket_name) # Create a blob object from the filepath blob = bucket.blob("folder_one/foldertwo/filename.extension") # Download the file to a destination blob.download_to_filename(destination_file_name) También puede usar .download_as_string() pero como lo está escribiendo en un archivo de todos modos, puede ser más fácil descargarlo directamente al archivo.
Lo único un poco incómodo a tener en cuenta es que la ruta del archivo es la ruta posterior al nombre del depósito, por lo que no se alinea exactamente con la ruta en la interfaz web.