Загрузите Большой Двоичный Объект В Локальное Хранилище с помощью Python

#python #azure-blob-storage #hdf5

#питон #azure-хранилище больших двоичных объектов #hdf5

Вопрос:

Я пытаюсь загрузить файл большого двоичного объекта и сохранить его локально на своем компьютере. Формат файла-HDF5 (формат, в котором я пока ограничен/не сталкивался).

До сих пор мне удавалось загружать что-то с помощью приведенных ниже сценариев. Ключевая проблема в том, что, похоже, это не полный файл. При загрузке файла непосредственно из проводника хранилища он составляет около 4000 кб. Файл HDF5, который я сохраняю, составляет 2 кб.

Что я делаю не так? Мне где-то не хватает readall ()?

Я впервые работаю с хранилищем больших двоичных объектов и HDF5, поэтому сейчас немного застрял. Многие старые вопросы, похоже, используют устаревшие команды в качестве azure.storage.модуль blob был обновлен.

 from azure.storage.blob import BlobServiceClient from io import StringIO, BytesIO import h5py  # Initialise client blob_service_client = BlobServiceClient.from_connection_string("my_conn_str") # Initialise container blob_container_client = blob_service_client.get_container_client("container_name") # Get blob blob_client = blob_container_client.get_blob_client("file_path")  # Download download_stream = blob_client.download_blob()  # Create empty stream stream = BytesIO() # Read downloaded blob into stream download_stream.readinto(stream) # Create new empty hdf5 file hf = h5py.File('data.hdf5', 'w') # Write stream into empty HDF5 hf.create_dataset('dataset_1',stream) # Close Blob (amp; save) hf.close()  

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

1. Привет @Стивен. уэбб ,если приведенный ниже ответ полезен для вас, вы можете принять его как ответ( нажмите на галочку рядом с ответом, чтобы переключить его с серого на заполненный.). Это может быть полезно для других членов сообщества. Спасибо

Ответ №1:

Я попытался воспроизвести сценарий в своей системе, столкнувшись с той же проблемой с кодом, который вы пытались

Поэтому я попробовал другое решение прочитать файл hdf5 как поток и записать его в другой файл hdf5

Попробуйте использовать это решение .Взял несколько фиктивных данных для целей тестирования.

 from azure.storage.blob import BlobServiceClient from io import StringIO, BytesIO import numpy as np import h5py  # Initialise client blob_service_client = BlobServiceClient.from_connection_string("Connection String") # Initialise container blob_container_client = blob_service_client.get_container_client("test//Container name") # Get blob blob_client = blob_container_client.get_blob_client("test.hdf5 //Blob name")  print("downloaded the blob ") # Download download_stream = blob_client.download_blob() stream = BytesIO() downloader = blob_client.download_blob()  # download the entire file in memory here # file can be many giga bytes! Big problem downloader.readinto(stream)  # works fine to open the stream and read data f = h5py.File(stream, 'r')   //dummy data data_matrix = np.random.uniform(-1, 1, size=(10, 3))  with h5py.File(stream, "r") as f:  # List all groups  print("Keys: %s" % f.keys())  a_group_key = list(f.keys())[0]   # Get the data  data = list(f[a_group_key])  data_matrix=data  print(data)  with h5py.File("file1.hdf5", "w") as data_file:  data_file.create_dataset("group_name", data=data_matrix)  

выход

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

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