Как прочитать файл json из хранилища больших двоичных объектов с помощью функций Azure Триггер больших двоичных объектов с Python

#python #json #azure #azure-functions #azure-blob-trigger

Вопрос:

Я создал BLOB-триггер в приложении функций Azure для чтения любого нового файла, вставляемого или обновляемого в хранилище больших двоичных объектов Azure.

Триггер работает правильно, чтобы идентифицировать последние файлы, вставленные или обновленные в мой контейнер больших двоичных объектов, а также я могу распечатать тело файла в формате 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)
 

введите описание изображения здесь

Ответ №1:

По сути, вы получаете эту ошибку, потому что вы дважды читаете из потока. После 1-го чтения позиция чтения потока устанавливается в конце потока, и именно поэтому ваше 2-е чтение завершается неудачей.

Основываясь на приведенных ниже комментариях, поскольку объект InputStream BytesIO не содержит операции поиска, решение вашей проблемы состоит в том, чтобы прочитать поток только один раз.

Попробуйте что-то вроде следующего:

 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)
 

Комментарии:

1. Большое спасибо за четкое объяснение проблемы. Теперь я могу сохранить файл json, записав его в первом экземпляре. При использовании поиска я получаю эту ошибку «Исключение: отменена операция: поиск». Похоже, что объект InputStream BytesIO не содержит операции поиска. github.com/Azure/azure-functions-python-worker/issues/… огромное спасибо

2. Спасибо за дополнительную информацию. Я в основном смоделировал это, прочитав из локального файла.

3. Обновил свой ответ на основе ваших комментариев.