В соответствии с официальным документом pandas.read_excel
, как показано ниже, вы не можете использовать myblob: func.InputStream
в качестве параметра io
из-за структуры InputStream
класс myblob
и io
должен быть URL-адресом BLOB-объекта с токеном sas или книгой xlrd.
Таким образом, мое решение - прочитать содержимое myblob
его методом read
и преобразовать его в xlrd
Book с помощью xlrd.open_workbook
метода с параметром 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}")
Мой образец 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"
}
}
function.json
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "myblob",
"type": "blobTrigger",
"direction": "in",
"path": "<your container name>/{name}",
"connection": "AzureWebJobsStorage"
}
]
}
needs.txt : просто показать мои дополнительные пакеты.
pandas==0.24.2
xlrd >= 1.0.0
Это работает. Результаты как: