Blob触发功能无法读取某些Excel文件

时间:2019-06-09 13:33:30

标签: python pandas azure azure-storage-blobs azure-function-app

我有一些Azure功能应用程序,应该由Blob触发。这个想法是,每次有东西落在Blob上(那只能是excel文件),该函数就会运行并进行一些处理。

def main(myblob: func.InputStream):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {myblob.name}\n"
                 f"Blob Size: {myblob.length} bytes"
                 f"Returns:{myblob.read}")

    #read new data and replace nan with none values
    data = pd.read_excel(myblob)
    data = data.where(pd.notnull(data), None)

#processing

此代码在测试期间对我有用。但是,我刚收到别人的编辑过的文件,得到了Exception: XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'\xef\xbb\xbfName,'

最后,这是供更多将使用这些文件的人使用的,因此我必须确保每次都能使用。但是,我在这里看不到任何模式。它适用于一个电子表格,而不适用于另一个电子表格。

2 个答案:

答案 0 :(得分:1)

根据pandas.read_excel官方文档,如下所示,由于{InputStream类的结构,您不能使用myblob: func.InputStream作为其参数io。 1}}和myblob应该是带有sas令牌或xlrd书的Blob网址。

enter image description here

enter image description here

所以我的解决方案是通过io方法读取myblob的内容,并通过带有read参数的xlrd.open_workbook方法将其转换为xlrd

这是我的示例代码。

file_contents

我的示例import logging import azure.functions as func import pandas as pd import xlrd def main(myblob: func.InputStream): logging.info(f"Python blob trigger function processed blob \n" f"Name: {myblob.name}\n" f"Blob Size: {myblob.length} bytes") book = xlrd.open_workbook(file_contents=myblob.read()) df = pd.read_excel(book) logging.info(f"{df}") 文件如下。

enter image description here

我的xlsxlocal.settings.jsonfunction.json的内容如下。

local.settings.json

requirements.txt

function.json

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=<your account name>;AccountKey=<your account key>;EndpointSuffix=core.windows.net"
  }
}

requirements.txt :只显示我的其他软件包。

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "myblob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "<your container name>/{name}",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

有效。结果如下:

enter image description here

答案 1 :(得分:0)

可能是3个原因:

  • 如错误消息所述,绝对不是Excel .xls格式。使用文本编辑器(例如记事本)将其打开,该编辑器不会注意到.xls扩展名不正确,并亲自查看。

该错误消息与XLS文件的BOF(文件开始)记录有关。

  • Excel已经打开文件的情况。会产生相同的错误。

  • read_excel,当您使用read_excel读取csv文件时。

希望能有所帮助。