Ошибка FileNotFound при попытке чтения из хранилища BLOB-объектов Azure

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

FileNotFoundError: [Errno 2] No such file or directory: 'file.npy'
Traceback:
File "C:\Users...\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 535, in _run_script
    exec(code, module.__dict__)
File "C:\Users...\app\main.py", line 34, in <module>
    v3_embedding = np.load(read_blob_content(account_name,
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users...\Lib\site-packages\numpy\lib\npyio.py", line 427, in load
    fid = stack.enter_context(open(os_fspath(file), "rb"))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

Вот код для дополнительного контекста:

В main.py

v3_embedding = np.load(read_blob_content(account_name, 
                              account_key,
                              container_name,
                              blob_name))

Функция read_blob_content:

def read_blob_content(storage_account_name, storage_account_key, container_name, blob_name):

    '''Reads files stored on Azure blob storage container'''

    # Create a BlobServiceClient
    blob_service_client = BlobServiceClient(account_url=f"https://{storage_account_name}.blob.core.windows.net", credential=storage_account_key)

    # Get the blob content as a stream
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)

    # Get the blob content as a stream
    blob_stream = blob_client.download_blob()

    # Read the content from the stream
    blob_content = blob_stream.readall().decode('utf-8')

    return blob_content
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
207
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Код:

import streamlit as st
import numpy as np
from read_blob import read_blob_content
from io import BytesIO

def main():
    st.title("Streamlit App")

    account_name = "<storage_key>"
    account_key = "<storage_key>"
    container_name = "<container_name>"
    blob_name = "<blobname.npy>"

    try:
        blob_content = read_blob_content(account_name, account_key, container_name, blob_name)
        with BytesIO(blob_content) as f:
            v3_embedding = np.load(f, allow_pickle=True)

        st.write("Loaded .npy file from Azure Blob Storage:")
        st.write(v3_embedding)

    except FileNotFoundError:
        st.error("The specified file was not found.")
    except Exception as e:
        st.error(f"An error occurred while loading the data: {str(e)}")

if __name__ == "__main__":
    main()

read_blob.py:

from azure.storage.blob import BlobServiceClient

def read_blob_content(storage_account_name, storage_account_key, container_name, blob_name):
    '''Reads files stored on Azure blob storage container'''

    blob_service_client = BlobServiceClient(account_url=f"https://{storage_account_name}.blob.core.windows.net", credential=storage_account_key)
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)

    blob_data = blob_client.download_blob()
    blob_content = blob_data.readall()

    return blob_content

Выход :

Код приложения Streamlit выполнен успешно, как показано ниже:

C:\Users\xxxxxxxx\Documents\xxxxxxxxx\app>streamlit run main.py

  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8501
  Network URL: http://192.168.0.126:8501

Приложение Streamlit считывает данные файла больших двоичных объектов .npy в браузере, как показано ниже.

Спасибо за ответ @Dasari. Я пробовал использовать BytesIO, но получил эту ошибку UnpicklingError: Failed to interpret file <_io.BytesIO object at 0x0000027BEA6F0810> as a pickle. Когда я пытаюсь удалить allow_pickle = True, вместо этого я получаю следующую ошибку: ValueError: Cannot load file containing pickled data when allow_pickle=False. Мне интересно, нужно ли мне повторно загружать файл .npy, чтобы решить эту проблему.

Marcelino Velasquez 10.03.2024 14:57

Привет, @dasari-kamali, спасибо за помощь. Я понял, что мне нужно повторно загрузить файлы .npy, поскольку по какой-то причине они были повреждены. После этого мой код работал нормально, но ваш код, на мой взгляд, более оптимален. Несмотря ни на что, еще раз спасибо.

Marcelino Velasquez 11.03.2024 01:12

Другие вопросы по теме