Cum pentru a consuma blob de fișiere?

0

Problema

Am o problema, am încărcat fișiere xlsx la google de stocare. Atunci când vreau să le reutiliza mai târziu, am obține o pată de fișier.

După ce că sunt pierderi privind modul de utilizare efectivă fișier 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

Scopul final ar fi de a descărca fișierul ca obiect și citiți-le cu openpyxl library (a lucra cu fișierul original, dar după stocare pe cloud nu am găsit o modalitate să-mi iau fișier xlsx).

Multumesc pentru ajutor !

edit: adăugarea de cod curent

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

Cel mai bun răspuns

2

Codul este citit Nor de Stocare blob în memorie:

bytes_version = o.download_as_bytes()

Și apoi încercarea de a încărca registrul de lucru din memorie:

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

Cu toate acestea, load_workbook() metoda se așteaptă ca un nume de fișier sau un fișier obiect. Folosind un octet string cu conținutul fișierului nu este acceptat.

openpyxl.cititor.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

Documentația

Soluție:

Salva de Stocare Cloud pată de cerneală de pe un disc local de fișiere în primul rând și apoi specificați numele fișierului în sunați pentru a load_workbook():

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

Notă: Înlocuiți /path/to/file cu o cale reală de pe sistemul dvs. și cu .xlsx extensie de fișier.

2021-11-19 11:28:56

Multumesc John, a înțeles problema ar fi posibil să se încarce fișierul de memorie în acest caz, cu siguranta gresit. Multumesc din nou !
Tony

În alte limbi

Această pagină este în alte limbi

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