Как узнать размер объекта BLOB-объекта Azure с помощью Python Azure SDK
Следуя документации Microsoft Azure для разработчиков Python. azure.storage.blob.models.Blob
класс имеет закрытый метод __sizeof__()
, Но он возвращает константное значение 16 независимо от того, является ли BLOB-объект пустым (0 байт) или 1 ГБ. Есть ли какой-либо метод / атрибут объекта BLOB-объекта, с помощью которого я могу динамически проверять размер объекта?
Чтобы быть более понятным, вот как выглядит мой исходный код.
for i in blobService.list_blobs(container_name=container, prefix=path):
if i.name.endswith('.json') and r'CIJSONTM.json/part' in i.name:
#do some stuffs
Тем не менее, пул данных содержит много пустых BLOB-объектов с допустимыми именами, и, прежде чем я #do some stuffs
Я хочу провести дополнительную проверку размера, чтобы определить, имею ли я дело с пустым блобом.
Кроме того, бонус за то, что именно делает __sizeof__()
метод дать, если не размер объекта блоба?
3 ответа
Я хочу провести дополнительную проверку размера, чтобы определить, имею ли я дело с пустым блобом.
Мы могли бы использовать BlobProperties(). Content_length, чтобы проверить, является ли это пустым BLOB-объектом.
BlockBlobService.get_blob_properties(block_blob_service,container_name,blob_name).properties.content_length
Ниже приведен демонстрационный код получения BLOB-объекта content_length:
from azure.storage.blob import BlockBlobService
block_blob_service = BlockBlobService(account_name='accoutName', account_key='accountKey')
container_name ='containerName'
block_blob_service.create_container(container_name)
generator = block_blob_service.list_blobs(container_name)
for blob in generator:
length = BlockBlobService.get_blob_properties(block_blob_service,container_name,blob.name).properties.content_length
print("\t Blob name: " + blob.name)
print(length)
from azure.storage.blob import BlobServiceClient
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
blob_list = blob_service_client.get_container_client(my_container).list_blobs()
for blob in blob_list:
print("\t" + blob.name)
print('\tsize=', blob.size)
Если кому-то интересно, как это сделать с помощью SDK v12, т. е. без использования BlockBlobService.
connection_string = "DefaultEndpointsProtocol=https;AccountName=YOUR-ACCOUNT;AccountKey=YOUR-KEY;EndpointSuffix=core.windows.net"
container_name = YOUR-CONTAINER
blob_client = BlobClient.from_connection_string(conn_str=connection_string, container_name = container_name, blob_name = YOUR-BLOB)
blob_client.get_blob_properties().size
Это даст вам размер в байтах, согласно документации.