我正在运行一个谷歌云函数,该函数访问excel文件的谷歌云存储桶。我的目标是读取文件并对其进行一些计算,但是否可以不将文件下载到/tmp文件夹?我尝试过的东西:
storage_client = storage.Client()
file_obj = storage_client.get_bucket(‘bucketname’).get_blob('filename.xlsx')
excel_file = None
file_obj.download_to_file(excel_file)
wb = openpyxl.load_workbook(excel_file)
一开始我以为我可以获得一个文件对象,但后来我读到错误消息后,我意识到有人问我要一个文件路径,所以我必须下载到/tmp文件夹,这是我想避免的。
我也尝试过download_as_bytes()
,但不幸的是openpyxl无法读取字节。
任何帮助/提示都将不胜感激:(
正如您在这个社区中看到的答案:
在openpyxl.load_workbook
的文档中,它说:
#:param filename: the path to open or a file-like object
因此,如果你有字节作为输入,你可以组装一个";原型对象";为了满足openpyxl.load_workbook
的参数要求,它将工作,就像下面的例子:
from io import BytesIO
...
excel_file = None
file_obj.download_as_bytes(excel_file)
wb = load_workbook(filename=BytesIO(excel_file.read()))