Jak korzystać plik dużego obiektu binarnego?

0

Pytanie

Mam problem, jestem pobierania plików xlsx w repozytorium Google. Kiedy chcę użyć ich później dostanę plik dużego obiektu binarnego.

Po tym gubię się w tym, jak używać rzeczywisty plik 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

Ostatecznym celem byłoby pobrać plik jako obiekt i odczytać go za pomocą biblioteki openpyxl (działa z plikiem źródłowym, ale po przechowywania w chmurze nie znalazła sposoby, aby mój plik xlsx).

Dziękuję za pomoc !

edycja: dodawanie bieżącego kodu

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

Najlepsza odpowiedź

2

Twój kod odczytuje duży obiekt binarny chmurze w pamięć:

bytes_version = o.download_as_bytes()

A następnie próbuje pobrać książkę z pamięci:

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

Jednak metoda load_workbook() oczekuje nazwy pliku lub файлоподобный obiekt. Korzystanie z байтовой wiersze z zawartością pliku nie jest obsługiwany.

openpyxl.reader.excel.load_workbook(nazwa pliku, read_only=False, keep_vba=False, data_only=False, keep_links=True)

Parametry:

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

Dokumentacja

Rozwiązanie:

Najpierw zapisz duży obiekt binarny chmurze do pliku na dysku lokalnym, a następnie wprowadź nazwę pliku w wywołaniu load_workbook():

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

Uwaga. Wymień /ścieżka/do/pliku / prawdziwe sposób w systemie i rozszerzeniem pliku .xlsx.

2021-11-19 11:28:56

Dziękuję, John, rozumiem problem, choć w tym przypadku można było pobrać plik z pamięci, że zdecydowanie źle. Jeszcze raz dziękuję !
Tony

W innych językach

Ta strona jest w innych językach

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