当前位置: 首页 > 知识库问答 >
问题:

AZURE函数从AZURE BLOB读取XLSX

夏侯承恩
2023-03-14

我想利用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下载文件并随后进行处理的例子,但由于我使用的是功能应用程序,如果我没有遗漏任何内容,那么首先下载文件是没有意义的...

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

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

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

但我认为我的方法实际上有一些根本性的错误。期望的结果是将文件直接读取到pandas表中。

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

共有1个答案

澹台正真
2023-03-14

熊猫本身不具备解析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)

它对我有用:

 类似资料:
  • 我正在尝试使用 azure 函数读取 azure blob 内容。 容器名称始终相同,Blob名称由触发该函数的队列消息传递。 当我运行此函数时,函数超时(超过5分钟)。 带有blob名称的队列消息是正确的并显示出来,blob只包含一个长json,大约是292kb。 我尝试在创建新blob时直接触发该函数,但它返回了一个带有流的对象,您知道任何方法使该流可读吗? 使用上面的代码,我可以正确获取bl

  • 用例 我有一个物联网中心设备,它向物联网中心发送遥测数据。我想处理遥测数据,例如使用函数存储到数据库。 功能 我在VS2019中创建了以下函数并将其发布到Azure: 资料来源:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid#use-作为事件网格触发器的http触发器 事件订阅

  • 问题内容: 我在通过火花流从天蓝色斑点读取数据时遇到问题 上面的代码适用于HDFS,但无法从Azure blob读取文件 上面是在azure UI中显示的路径,但是这行不通,我是否丢失了某些内容,以及如何访问它。 我知道Eventhub是流数据的理想选择,但是我目前的情况要求使用存储而不是队列 问题答案: 为了从Blob存储中读取数据,需要完成两件事。首先,您需要告诉Spark在基础Hadoop配

  • 我在Azure (blob)存储上读取Blob中存储的文本时遇到问题。 blob只包含单行文本(字符串)。blob通过Azure Functions HttpTrigger (C#)填充文本,HttpTrigger通过POST接收文本,并用用户指定的名称将文本保存到blob中。保存blob时,名称全部转换为小写。 然后,用户可以访问一个简单的超文本标记语言网页,并在表单中输入blob的名称。当用户

  • 我设置了一个azure函数,它是由添加到特定容器的blob触发的。blob是一个. zip文件,我的意图是使用将blob提取到目录中,然后读取内容。我对这里的留档感到困惑:https://github.com/Azure/azure-content/blob/master/articles/azure-functions/functions-bindings-storage.md#blob-tri

  • 我正在使用Azure函数V1 c#。我有一个时间触发的azure函数,它每秒都在检查我的数据库中的一些数据。如果找到了数据,我想对它执行一些操作。此操作可能需要30秒到5分钟的时间,具体取决于其上发生的操作。 > 当我的时间触发函数获取数据并开始对其执行操作时。在第一个操作完成之前,时间触发的函数不会再次执行。因此,即使时间触发函数被安排为每秒执行一次,如果上一次迭代中的操作花费了 30 秒,则在