Cómo consumir el archivo blob?

0

Pregunta

Estoy teniendo un problema, yo soy de subir archivos xlsx para almacenamiento de google. Cuando quiero volver a utilizarlos más tarde en obtener un archivo blob.

Después de que yo soy de la pérdida sobre cómo usar la real xlsx.

from google.cloud import storage

import openpyxl

client = storage.Client()
new_bucket = client.get_bucket('bucket.appspot.com')

#get blob object:
o = new_bucket.get_blob('old_version.xlsx')

# <Blob: blobstorage.appspot.com, old_version.xlsx, 16372393787851916>

#download the object

bytes_version = o.download_as_bytes()

#load it to openpyxl library
wb = load_workbook(filename = bytes_version ,data_only=True)

InvalidFileException: openpyxl does not support b'.xmlpk\x05\x06\x00\x00\x00\x00:\x00:\x00n\x10\x00\x00\xa6\x06\x01\x00\x00\x00' file format, please check you can open it with Excel first. Supported formats are: .xlsx,.xlsm,.xltx,.xltm

El objetivo final sería para descargar el archivo como objeto y leerlos con openpyxl de la biblioteca (que es trabajar con el archivo original, pero después de que el almacenamiento en la nube no encontrar la manera de conseguir mi xlsx).

Gracias por la ayuda !

edit: la adición de código actual

blob excel google-cloud-storage python
2021-11-18 15:48:38
1

Mejor respuesta

2

Su código es la lectura de la Nube de Almacenamiento de blobs en la memoria:

bytes_version = o.download_as_bytes()

Y, a continuación, tratando de cargar el libro de la memoria:

wb = load_workbook(filename = bytes_version ,data_only=True)

Sin embargo, la load_workbook() método que espera un nombre de archivo o un archivo objeto. El uso de una cadena de bytes con el contenido del archivo no es compatible.

openpyxl.lector.excel.load_workbook(nombre de archivo, read_only=False, keep_vba=False, data_only=False, keep_links=True)

Parámetros:

filename (string or a file-like object open in binary mode c.f., zipfile.ZipFile) – the path to open or a file-like object

Documentación

Solución:

Guardar la Nube de Almacenamiento de blobs a un archivo de disco primero y, a continuación, especifique el nombre de archivo en la llamada a load_workbook():

o.download_to_filename('/path/to/file')
wb = load_workbook(filename = '/path/to/file' ,data_only=True)

Nota: Reemplazar /ruta/a/archivo con un camino real en su sistema y con el .xlsx la extensión de archivo.

2021-11-19 11:28:56

Gracias Juan, entendió el tema a pesar de Que sería posible cargar el archivo de la memoria en ese caso definitivamente mal. Gracias de nuevo !
Tony

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................