【问题标题】:Input multiple blobs into azure function python将多个 blob 输入到 azure 函数 python
【发布时间】:2021-05-13 17:08:19
【问题描述】:

我正在为 Azure 函数使用 python。我正在尝试读取两个 blob,一个是触发的,一个是静态 blob。

当我读入它们时,两个 blob 都指向触发的 blob(URI 相同)。如何正确输入和使用两个 blob?

我的绑定看起来像:

{
      "name": "techdatablob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "path1/{name}",
      "connection": "example"
    },
    {
      "name": "crmdatablob",
      "type": "blob",
      "direction": "in",
      "path": "path2/data.xlsx",
      "connection": "example"
    },
    {
      "name": "outputblob",
      "type": "blob",
      "direction": "out",
      "path": "path3/out.xlsx",
      "connection": "example"
    }

init.py 文件以:

开头
def main(techdatablob: func.InputStream, crmdatablob: func.InputStream, outputblob: func.Out[func.InputStream]):
    logging.info(f"Python blob trigger function processed blob \n"
                 f"Name: {techdatablob.name}\n"
                 f"Blob Size: {techdatablob.length} bytes")

    print(techdatablob.uri)
    print(crmdatablob.uri)

【问题讨论】:

  • 这应该可以正常工作,你有什么错误吗?
  • 我没有收到任何错误,除了后来遇到的错误,因为文件相同。请注意,我只在本地进行了测试,当被要求提供正文时,我得到了一个已知文件的路径,例如。 “path1/data.xlsx”,它只拉入那个文件
  • 你能展示一下代码结构吗?
  • 我在上面的 init.py 文件示例中添加了更多代码。那里有一些定义和一些导入,但除此之外,就是这样。
  • 我觉得对于元数据,python的azure binding暂时还是有一些问题的。其实你输入的确实是两个不同的blob对象,只是输入的部分无法获取uri等元数据值。

标签: python azure azure-functions blob


【解决方案1】:

当我读入它们时,两个 blob 都指向触发的 blob(URI 是 相同)。如何正确输入和使用两个 blob?

其实你已经输入了多个blob,问题出在azure函数blob绑定元数据不是来自函数宿主,所以blob名称、blob长度、uri等无法获取正确值。但实际上它们的数据是不同的(对象也不同)。

您可以执行以下操作来测试:

import logging

import azure.functions as func


def main(techdatablob: func.InputStream, crmdatablob: func.InputStream) -> None:
    logging.info("-----"+techdatablob.read().decode('utf-8'))
    logging.info("-----"+crmdatablob.read().decode('utf-8'))

检查此错误页面:

https://github.com/Azure/azure-functions-python-worker/issues/576

我认为问题不在你这边,而是功能设计问题。使用 storage sdk 获取元数据应该没有问题。

【讨论】:

  • 谢谢鲍曼!这是有道理的——尽管他们没有解决这个问题很奇怪......然后我尝试将文件读入 pd.read_excel,并且 decode('utf-8') 给了我一个错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 16: invalid continuation byte 这是一个blob 问题,还是数据通过问题?
  • @Dave 你在用熊猫吗?我不确定,看起来解码方式是错误的(只是猜测),你可以谷歌它或在 SO 上提问。
  • 是的,通过 pandas 使用 pd.read_excel()。好的,不用担心,感谢您的帮助!
猜你喜欢
  • 2017-08-16
  • 2019-08-20
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
相关资源
最近更新 更多