Zgodnie z Dokumentacja Microsoft Azure dla programistów Pythona. Klasa azure.storage.blob.models.Blob ma prywatną metodę o nazwie __sizeof__(). Ale zwraca stałą wartość 16, niezależnie od tego, czy obiekt blob jest pusty (0 bajtów), czy 1 GB. Czy istnieje jakaś metoda/atrybut obiektu blob, za pomocą którego mogę dynamicznie sprawdzać rozmiar obiektu?

Żeby było jaśniej, tak wygląda mój kod źródłowy.

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

Jednak pula danych zawiera wiele pustych obiektów blob o prawidłowych nazwach i zanim #do some stuffs chcę dodatkowo sprawdzić rozmiar, aby ocenić, czy mam do czynienia z pustym obiektem blob.

Również premia za to, co dokładnie daje metoda __sizeof__(), jeśli nie rozmiar obiektu blob?

1
Della 19 listopad 2018, 10:04
Twoja połączona klasa obiektu BLOB ma właściwość metadanych — czy możesz sprawdzić, co tam jest? Być może, jak na twoim przykładzie: i.metadata['size'] lub równoważny python, aby uzyskać wartość z pary nazwanych kluczy-wartość?
 – 
user3012708
19 listopad 2018, 11:27

2 odpowiedzi

Najlepsza odpowiedź

Chcę dodatkowo sprawdzić rozmiar, aby ocenić, czy mam do czynienia z pustą plamą.

Moglibyśmy użyć rel BlobProperties().content_length, aby sprawdzić, czy jest to pusty obiekt blob.

BlockBlobService.get_blob_properties(block_blob_service,container_name,blob_name).properties.content_length

Poniżej znajduje się kod demonstracyjny, jak uzyskać obiekt 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)
6
Tom Sun - MSFT 19 listopad 2018, 11:24
Dziękuję. Co ciekawe, wygląda na to, że metoda ta nie występuje w dokumentacji. A co robi tutaj metoda '__sizeof__()'?
 – 
Della
20 listopad 2018, 12:33
Czy możesz dodać więcej informacji na temat __sizeof__()? Czy zajrzałeś do źródła kod?
 – 
Tom Sun - MSFT
20 listopad 2018, 12:37
Ten rozmiar jest w bajtach ?
 – 
Omer Anisfeld
22 październik 2019, 12:18
Ta odpowiedź jest amortyzowana
 – 
Raphaël
14 wrzesień 2020, 19:01
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)
0
Ailie Tourlog 18 sierpień 2021, 22:46