AZURE 函数从 AZURE BLOB 读取 XLSX

AZURE Function read XLSX from AZURE BLOB

我想利用 AZURE Function 应用程序从 AZURE BLOB 存储中读取 XLSX 文件。 该函数应由 REST API 调用调用。 我可以访问 blob 并下载文件,但我很难直接使用 pandas 读取文件的内容。我正在搜索并尝试了几个小时,但找不到解决方案。我的最新方法如​​下所示:

def main(req: func.HttpRequest) -> func.HttpResponse:
        logging.info('Python HTTP trigger function processed a request.')

        blob_service_client = BlobServiceClient.from_connection_string(CONNECTION_STRING)
        container_client = blob_service_client.get_container_client(CONTAINERNAME)
        blob_client = blob_service_client.get_blob_client(container = CONTAINERNAME, blob=BLOBNAME)
        blob = BlobClient(ACCOUNT_URL, CONTAINERNAME, BLOBNAME)

        #READ PRODUCTS FILE
        blob_client.download_blob().readinto(LOCALFILENAME)
        df = pd.read_excel(blob_client.download_blob())

在 MS 主页* 上,有一个从 blob 下载文件并在之后处理它的示例,但由于我正在使用函数应用程序,如果我正在使用,则先下载文件没有意义没有遗漏任何东西...

*https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python

blob 的自动完成功能为我提供了以下选项,但它们也不是很有用:

错误消息因我尝试读取文件的方式而异。当前的是:

System.Private.CoreLib: Exception while executing function: Functions.TrainProductModel. System.Private.CoreLib: Result: Failure
Exception: AttributeError: 'str' object has no attribute 'write'

但我认为我的方法实际上存在根本性错误。 期望的结果是直接将文件读入 pandas table.

感谢任何支持,因为这阻碍了我的硕士论文的进展:/

Pandas本身没有解析xlsx文件的能力。 Pandas 基于外部库xlrd解析xlsx文件。而且你不应该安装高版本的xlrd,因为高版本取消了对xlsx文件的支持(只支持xls文件),推荐版本是1.2.0(这个对我有效)

下面是我的代码:

import os, uuid
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__
import pandas as pd

CONNECTION_STRING = "DefaultEndpointsProtocol=https;AccountName=0730bowmanwindow;AccountKey=xxxxxx;EndpointSuffix=core.windows.net"
CONTAINERNAME = "test"
BLOBNAME = "test.xlsx"
LOCALFILENAME = "testx.xlsx" 

blob_service_client = BlobServiceClient.from_connection_string(CONNECTION_STRING)
container_client = blob_service_client.get_container_client(CONTAINERNAME)
blob_client = blob_service_client.get_blob_client(container = CONTAINERNAME, blob=BLOBNAME)

#READ PRODUCTS FILE
f = open(LOCALFILENAME, "wb")
f.write(blob_client.download_blob().content_as_bytes())
f.close()
df = pd.read_excel(r''+LOCALFILENAME)
print(df)

它对我有效: