Wyświetlanie listy obiektów blob za pomocą języka Python
W tym artykule pokazano, jak wyświetlić listę obiektów blob przy użyciu biblioteki klienta usługi Azure Storage dla języka Python.
Aby dowiedzieć się więcej na temat wyświetlania listy obiektów blob przy użyciu asynchronicznych interfejsów API, zobacz Asynchronicznie wyświetlanie listy obiektów blob.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz jedną bezpłatnie
- Konto usługi Azure Storage — tworzenie konta magazynu
- Python 3.8+
Konfigurowanie środowiska
Jeśli nie masz istniejącego projektu, w tej sekcji pokazano, jak skonfigurować projekt do pracy z biblioteką klienta usługi Azure Blob Storage dla języka Python. Aby uzyskać więcej informacji, zobacz Rozpoczynanie pracy z usługami Azure Blob Storage i Python.
Aby pracować z przykładami kodu w tym artykule, wykonaj następujące kroki, aby skonfigurować projekt.
Instalowanie pakietów
Zainstaluj następujące pakiety przy użyciu polecenia pip install
:
pip install azure-storage-blob azure-identity
Dodawanie instrukcji importu
Dodaj następujące instrukcje import
:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContainerClient, BlobPrefix
Autoryzacja
Mechanizm autoryzacji musi mieć niezbędne uprawnienia do wyświetlania listy obiektów blob. Aby uzyskać autoryzację przy użyciu identyfikatora Entra firmy Microsoft (zalecane), potrzebujesz wbudowanej kontroli dostępu opartej na rolach platformy Azure czytnika danych obiektów blob usługi Storage lub nowszego. Aby dowiedzieć się więcej, zobacz wskazówki dotyczące autoryzacji dla obiektów blob listy (interfejs API REST).
Tworzenie obiektu klienta
Aby połączyć aplikację z usługą Blob Storage, utwórz wystąpienie klasy BlobServiceClient. W poniższym przykładzie pokazano, jak utworzyć obiekt klienta przy użyciu DefaultAzureCredential
autoryzacji:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
Można również tworzyć obiekty klienta dla określonych kontenerów lub obiektów blob bezpośrednio lub z BlobServiceClient
obiektu. Aby dowiedzieć się więcej na temat tworzenia obiektów klienta i zarządzania nimi, zobacz Tworzenie obiektów klienta korzystających z zasobów danych i zarządzanie nimi.
Opcje wyświetlania listy obiektów blob — informacje
Podczas wyświetlania listy obiektów blob z kodu można określić wiele opcji zarządzania sposobem zwracania wyników z usługi Azure Storage. Możesz określić liczbę wyników, które mają być zwracane w każdym zestawie wyników, a następnie pobrać kolejne zestawy. Można określić prefiks do zwracania obiektów blob, których nazwy zaczynają się od tego znaku lub ciągu. Obiekty blob można również wyświetlać w płaskiej strukturze listy lub hierarchicznie. Hierarchiczna lista zwraca obiekty blob tak, jakby zostały zorganizowane w foldery.
Aby wyświetlić listę obiektów blob w kontenerze przy użyciu listy płaskiej, wywołaj jedną z następujących metod:
- ContainerClient.list_blobs (wraz z nazwą można opcjonalnie dołączyć metadane, tagi i inne informacje skojarzone z każdym obiektem blob)
- ContainerClient.list_blob_names (zwraca tylko nazwę obiektu blob)
Aby wyświetlić listę obiektów blob w kontenerze przy użyciu listy hierarchicznej, wywołaj następującą metodę:
- ContainerClient.walk_blobs (wraz z nazwą można opcjonalnie dołączyć metadane, tagi i inne informacje skojarzone z każdym obiektem blob)
Filtrowanie wyników za pomocą prefiksu
Aby przefiltrować listę obiektów blob, określ ciąg argumentu słowa kluczowego name_starts_with
. Ciąg prefiksu może zawierać co najmniej jeden znak. Następnie usługa Azure Storage zwraca tylko obiekty blob, których nazwy zaczynają się od tego prefiksu.
Lista płaska a lista hierarchiczna
Obiekty blob w usłudze Azure Storage są zorganizowane w modelu płaskim, a nie w modelu hierarchicznym (np. klasycznym systemie plików). Można jednak organizować obiekty blob w katalogach wirtualnych , aby naśladować strukturę folderów. Katalog wirtualny stanowi część nazwy obiektu blob i jest wskazywany przez znak ogranicznika.
Aby zorganizować obiekty blob w katalogach wirtualnych, użyj znaku ogranicznika w nazwie obiektu blob. Domyślny znak ogranicznika to ukośnik (/), ale można określić dowolny znak jako ogranicznik.
Jeśli nazwij obiekty blob przy użyciu ogranicznika, możesz wybrać hierarchicznie listę obiektów blob. W przypadku operacji listy hierarchicznej usługa Azure Storage zwraca wszystkie katalogi wirtualne i obiekty blob pod obiektem nadrzędnym. Operację wyświetlania listy można wywołać rekursywnie, aby przejść przez hierarchię, podobnie jak w przypadku programowego przechodzenia przez klasyczny system plików.
Używanie listy płaskiej
Domyślnie operacja wyświetlania listy zwraca obiekty blob w płaskiej liście. Na liście płaskiej obiekty blob nie są zorganizowane przez katalog wirtualny.
W poniższym przykładzie wymieniono obiekty blob w określonym kontenerze przy użyciu listy płaskiej:
def list_blobs_flat(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
blob_list = container_client.list_blobs()
for blob in blob_list:
print(f"Name: {blob.name}")
Przykładowe dane wyjściowe są podobne do następujących:
List blobs flat:
Name: file4.txt
Name: folderA/file1.txt
Name: folderA/file2.txt
Name: folderA/folderB/file3.txt
Możesz również określić opcje filtrowania wyników listy lub pokazać dodatkowe informacje. W poniższym przykładzie wymieniono obiekty blob i tagi obiektów blob:
def list_blobs_flat_options(self, blob_service_client: BlobServiceClient, container_name):
container_client = blob_service_client.get_container_client(container=container_name)
blob_list = container_client.list_blobs(include=['tags'])
for blob in blob_list:
print(f"Name: {blob['name']}, Tags: {blob['tags']}")
Przykładowe dane wyjściowe są podobne do następujących:
List blobs flat:
Name: file4.txt, Tags: None
Name: folderA/file1.txt, Tags: None
Name: folderA/file2.txt, Tags: None
Name: folderA/folderB/file3.txt, Tags: {'tag1': 'value1', 'tag2': 'value2'}
Uwaga
Przedstawione przykładowe dane wyjściowe zakładają, że masz konto magazynu z płaską przestrzenią nazw. Jeśli włączono funkcję hierarchicznej przestrzeni nazw dla konta magazynu, katalogi nie są wirtualne. Zamiast tego są to konkretne, niezależne obiekty. W związku z tym katalogi są wyświetlane na liście jako obiekty blob o zerowej długości.
Aby uzyskać alternatywną opcję wyświetlania listy podczas pracy z hierarchiczną przestrzenią nazw, zobacz List directory contents (Azure Data Lake Storage).
Używanie listy hierarchicznej
Po wywołaniu operacji listy hierarchicznie usługa Azure Storage zwraca katalogi wirtualne i obiekty blob na pierwszym poziomie hierarchii.
Aby wyświetlić hierarchicznie listę obiektów blob, użyj następującej metody:
W poniższym przykładzie wymieniono obiekty blob w określonym kontenerze przy użyciu listy hierarchicznej:
depth = 0
indent = " "
def list_blobs_hierarchical(self, container_client: ContainerClient, prefix):
for blob in container_client.walk_blobs(name_starts_with=prefix, delimiter='/'):
if isinstance(blob, BlobPrefix):
# Indentation is only added to show nesting in the output
print(f"{self.indent * self.depth}{blob.name}")
self.depth += 1
self.list_blobs_hierarchical(container_client, prefix=blob.name)
self.depth -= 1
else:
print(f"{self.indent * self.depth}{blob.name}")
Przykładowe dane wyjściowe są podobne do następujących:
folderA/
folderA/folderB/
folderA/folderB/file3.txt
folderA/file1.txt
folderA/file2.txt
file4.txt
Uwaga
Nie można wymienić migawek obiektów blob w operacji hierarchicznej listy.
Asynchroniczna lista obiektów blob
Biblioteka klienta usługi Azure Blob Storage dla języka Python obsługuje asynchroniczne wyświetlanie listy obiektów blob. Aby dowiedzieć się więcej na temat wymagań dotyczących konfiguracji projektu, zobacz Programowanie asynchroniczne.
Wykonaj następujące kroki, aby wyświetlić listę obiektów blob przy użyciu asynchronicznych interfejsów API:
Dodaj następujące instrukcje importowania:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, ContainerClient, BlobPrefix
Dodaj kod, aby uruchomić program przy użyciu polecenia
asyncio.run
. Ta funkcja uruchamia przekazaną kohroutynę wmain()
naszym przykładzie i zarządza pętląasyncio
zdarzeń. Coroutines są deklarowane za pomocą składni async/await. W tym przykładziemain()
coroutine najpierw tworzy najwyższy poziomBlobServiceClient
przy użyciu metodyasync with
, a następnie wywołuje metodę, która wyświetla listę obiektów blob. Należy pamiętać, że tylko klient najwyższego poziomu musi używać programuasync with
, ponieważ inni klienci utworzoni na jego podstawie współużytkować tę samą pulę połączeń.async def main(): sample = BlobSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.list_blobs_flat(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Dodaj kod, aby wyświetlić listę obiektów blob. Poniższy przykład kodu wyświetla listę obiektów blob przy użyciu płaskiej listy. Kod jest taki sam jak w przykładzie synchronicznym, z tą różnicą, że metoda jest zadeklarowana za pomocą słowa kluczowego
async
iasync for
jest używana podczas wywoływanialist_blobs
metody.async def list_blobs_flat(self, blob_service_client: BlobServiceClient, container_name): container_client = blob_service_client.get_container_client(container=container_name) async for blob in container_client.list_blobs(): print(f"Name: {blob.name}")
Ta podstawowa konfiguracja umożliwia zaimplementowanie innych przykładów w tym artykule jako kohroutines przy użyciu składni async/await.
Zasoby
Aby dowiedzieć się więcej na temat wyświetlania listy obiektów blob przy użyciu biblioteki klienta usługi Azure Blob Storage dla języka Python, zobacz następujące zasoby.
Przykłady kodu
- Wyświetlanie synchronicznych lub asynchronicznych przykładów kodu z tego artykułu (GitHub)
Operacje interfejsu API REST
Zestaw Azure SDK dla języka Python zawiera biblioteki, które bazują na interfejsie API REST platformy Azure, umożliwiając interakcję z operacjami interfejsu API REST za pomocą znanych paradygmatów języka Python. Metody biblioteki klienta do wyświetlania listy obiektów blob używają następującej operacji interfejsu API REST:
- Wyświetlanie listy obiektów blob (interfejs API REST)
Zasoby biblioteki klienta
Zobacz też
Powiązana zawartość
- Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla języka Python. Aby dowiedzieć się więcej, zobacz pełną listę artykułów z przewodnika dla deweloperów w temacie Tworzenie aplikacji w języku Python.