【问题标题】:How to read json file from blob storage using Azure Functions Blob Trigger with Python如何使用 Azure Functions Blob Trigger 和 Python 从 Blob 存储中读取 json 文件
【发布时间】:2021-08-26 08:01:44
【问题描述】:

我在 Azure Function App 中创建了一个 BlobTrigger 来读取在我的 Azure Blob 存储中插入或更新的任何新文件。

触发器正常工作以识别在我的 blob 容器中插入或更新的最新文件,并且我能够打印文件的 json 正文。

但是,当我尝试将 json 对象存储在变量中以对其进行转换时,它会引发错误。

我想将 json 的每个键分配给一个变量。 我的json是

   {
    "name":"Saikat",
    "id":"1234"
   }

下面是我可以在尝试存储它时打印 json 和错误的代码。

   import logging
   import azure.functions as func
   import json

   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")
        print("JSON Body",json.load(myblob))

   import logging
   import azure.functions as func
   import json

   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")
        print("JSON Body",json.load(myblob))
        #Store JSON file
        jsonData= json.load(myblob)
        print("****jsonData*****",jsonData)

【问题讨论】:

    标签: python json azure azure-functions azure-blob-trigger


    【解决方案1】:

    基本上你得到这个错误是因为你从流中读取了两次。第一次读取后,流的读取位置设置在流的末尾,这就是您的第二次读取失败的原因。

    基于下面的cmets,由于InputStream BytesIO对象不包含seek操作,解决你的问题的方法是只读取一次流。

    尝试以下方法:

    import logging
    import azure.functions as func
    import json
    
    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")
        jsonData= json.load(myblob)
        print("JSON Body",jsonData)
    
        #Store JSON file
        print("****jsonData*****",jsonData)
    

    【讨论】:

    • 非常感谢您清楚地解释问题。我现在可以通过在第一个实例中捕获它来存储 json 文件。在使用 seek 时,我收到此错误“异常:UnsupportedOperation:seek”。看来 InputStream BytesIO 对象不包含查找操作。 github.com/Azure/azure-functions-python-worker/issues/… 非常感谢
    • 感谢您提供更多信息。我基本上是通过读取本地文件来模拟的。
    • 根据您的 cmets 更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2021-06-01
    • 2012-06-16
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    相关资源
    最近更新 更多