Come consumare file blob?

0

Domanda

Ho un problema, sto caricando file xlsx per l'archiviazione di google. Quando voglio riutilizzare in seguito, ottenere un file blob.

Dopo di che io sono in perdita su come utilizzare il file 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

Obiettivo finale sarebbe quello di scaricare il file come oggetto e di leggere con openpyxl biblioteca (lavorare con il file originale, ma dopo l'archiviazione sul cloud non trovi il modo per ottenere il mio file xlsx).

Grazie per l'aiuto !

edit: aggiunta di codice corrente

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

Migliore risposta

2

Il codice è la lettura del Cloud di Archiviazione blob in memoria di:

bytes_version = o.download_as_bytes()

E poi cercando di caricare la cartella di lavoro dalla memoria:

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

Tuttavia, il load_workbook() metodo prevede un nome di file o un oggetto simile. Utilizzando una stringa di byte con il contenuto del file non è supportato.

openpyxl.il lettore.excel.load_workbook(filename, read_only=False, keep_vba=False, data_only=False, keep_links=True)

Parametri:

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

Documentazione

Soluzione:

Salvare il Cloud di Archiviazione blob di un disco locale del primo file e quindi specificare il nome del file nella chiamata a load_workbook():

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

Nota: Sostituire /percorso/del/file con un vero e proprio percorso nel sistema e con l' .xlsx file con estensione.

2021-11-19 11:28:56

Grazie Giovanni, capito il problema ho pensato Che sarebbe stato possibile caricare il file dalla memoria, in quel caso, sicuramente sbagliato. Grazie ancora !
Tony

In altre lingue

Questa pagina è in altre lingue

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