0

我有一些应该由 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,'

最后,这是为了让更多上传这些文件的人使用,所以我必须确保它每次都能正常工作。但是,我在这里看不到任何模式。它适用于一个电子表格,但不适用于另一个。

4

2 回答 2

3

根据pandas.read_excel官方文档,如下所示,不能myblob: func.InputStream用作其参数io,因为and的InputStream类的结构应该是带有 sas token 或 xlrd book 的 blob url。myblobio

在此处输入图像描述

在此处输入图像描述

所以我的解决方案是myblob通过其方法读取内容,并通过带参数的read方法将其转换为xlrdBook 。xlrd.open_workbookfile_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}")

我的示例xlsx文件如下。

在此处输入图像描述

我的local.settings.json, function.json&requirements.txt内容如下。

local.settings.json

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

函数.json

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

requirements.txt:只显示我的附加包。

pandas==0.24.2
xlrd >= 1.0.0

有用。结果如下:

在此处输入图像描述

于 2019-06-11T10:53:57.093 回答
0

可能是3个原因:

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

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

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

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

希望对您有所帮助。

于 2019-06-10T05:28:04.013 回答