Python AZURE函数从AZURE BLOB读取XLSX
我想利用AZURE Function应用程序从AZURE BLOB存储读取XLSX文件。 该函数应通过REST API调用调用。 我可以访问blob并下载文件,但我正努力用pandas直接读取文件内容。我搜索和尝试了几个小时,但找不到解决方案。我的最新方法如下所示: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
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