Comment consommer fichier blob?

0

La question

Je rencontre un problème, je suis le téléchargement de fichiers xlsx vers l'espace de stockage google. Quand je veux les réutiliser plus tard-je obtenir un fichier blob.

Après que je suis à une perte sur la façon d'utiliser le fichier 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

L'objectif final serait de télécharger le fichier d'objet et de les lire avec openpyxl bibliothèque (il travail avec le fichier d'origine, mais une fois que le stockage sur le cloud n'ai pas trouver de moyen d'obtenir mon fichier xlsx).

Merci pour l'aide !

edit: ajout de code actuel

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

La meilleure réponse

2

Votre code est de lire le Cloud de Stockage d'objets blob dans la mémoire:

bytes_version = o.download_as_bytes()

Et puis essayez de charger le classeur à partir de la mémoire:

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

Cependant, la load_workbook() méthode attend un nom de fichier ou un fichier objet semblable. À l'aide d'une chaîne d'octets avec le contenu du fichier n'est pas pris en charge.

openpyxl.reader.excel.load_workbook(nom de fichier, read_only=False, keep_vba=False, data_only=False, keep_links=True)

Paramètres:

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

La Documentation

Solution:

Enregistrer le Cloud de Stockage d'objets blob sur un disque local du premier fichier et spécifiez le nom de fichier dans l'appel à load_workbook():

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

Remarque: Remplacer le /chemin/vers/fichier avec un chemin réel sur votre système et avec la .xlsx l'extension de fichier.

2021-11-19 11:28:56

Merci John, de comprendre la question je pensais qu'Il serait possible de charger un fichier à partir de la mémoire dans ce cas définitivement mauvais. Merci encore !
Tony

Dans d'autres langues

Cette page est dans d'autres langues

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