Python AZURE函数从AZURE BLOB读取XLSX

Python AZURE函数从AZURE BLOB读取XLSX,python,azure,azure-functions,azure-storage-blobs,Python,Azure,Azure Functions,Azure Storage Blobs,我想利用AZURE Function应用程序从AZURE BLOB存储读取XLSX文件。 该函数应通过REST API调用调用。 我可以访问blob并下载文件,但我正努力用pandas直接读取文件内容。我搜索和尝试了几个小时,但找不到解决方案。我的最新方法如下所示: def main(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger function processe

我想利用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 homepage*上,有一个例子可以从blob下载文件,然后进行处理,但由于我使用的是功能应用程序,如果我没有遗漏任何内容,那么先下载文件是没有意义的

*

blob的自动完成功能为我提供了以下选项,但它们也没有真正的帮助:

根据我尝试读取文件的方式,错误消息会有所不同。目前的情况是:

System.Private.CoreLib: Exception while executing function: Functions.TrainProductModel. System.Private.CoreLib: Result: Failure
Exception: AttributeError: 'str' object has no attribute 'write'
但我认为我的方法实际上有一些根本性的错误。 理想的结果是将文件直接读取到表中


感谢大家对我的硕士论文的支持:/

熊猫本身没有解析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)
在我这方面也很有效:


您是否尝试过
df=pd.read\u excel(blob\u客户端。下载\u blob().readinto())
?我不熟悉pandas,也不熟悉python的blob库,但是在阅读
read\u excel
download\u blob
的文档时,您似乎必须使用
readinto()
将blob下载到流中,而
read\u excel()
似乎接受作为
io
参数的有效参数。您需要给出“r”和文件名,并且还需要安装旧版本的xlrd。请检查我的答案。谢谢(席席?)Bowman Zhu