Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erfahren Sie, wie Sie mithilfe von Python Verzeichnisse und Dateien in Speicherkonten erstellen und verwalten, die über einen hierarchischen Namespace verfügen.
Weitere Informationen zum Abrufen, Festlegen und Aktualisieren der Zugriffssteuerungslisten (Access Control Lists, ACLs) von Verzeichnissen und Dateien finden Sie unter Verwalten von Zugriffssteuerungslisten in Azure Data Lake Storage mit Python.
PyPi-Paket | Beispiele | API-Referenz | Zuordnung von Gen1 zu Gen2 | Feedback geben
Voraussetzungen
Ein Azure-Abonnement. Siehe Kostenlose Azure-Testversion.
Ein Speicherkonto, bei dem der hierarchische Namespace aktiviert wurde. Befolgen Sie diese Anleitung für die Erstellung.
Einrichten des Projekts
In diesem Abschnitt wird beschrieben, wie Sie ein Projekt zur Arbeit mit der Azure Data Lake Storage-Clientbibliothek für Python vorbereiten.
Installieren Sie aus Ihrem Projektverzeichnis mithilfe des Befehls pip install die Pakete für die Azure Data Lake Storage- und Azure Identity-Clientbibliotheken. Das azure-identity-Paket wird für kennwortlose Verbindungen mit Azure-Diensten benötigt.
pip install azure-storage-file-datalake azure-identity
Öffnen Sie dann Ihre Codedatei, und fügen Sie die erforderlichen Importanweisungen hinzu. In diesem Beispiel fügen Sie Ihrer PY-Datei Folgendes hinzu:
import os
from azure.storage.filedatalake import (
DataLakeServiceClient,
DataLakeDirectoryClient,
FileSystemClient
)
from azure.identity import DefaultAzureCredential
Hinweis
Der Multiprotokollzugriff auf Data Lake Storage ermöglicht Anwendungen die Verwendung von Blob-APIs und Data Lake Storage Gen2-APIs zum Arbeiten mit Daten in Speicherkonten mit aktiviertem hierarchischen Namespace (HNS). Wenn Sie mit speziellen Funktionen für Data Lake Storage Gen2 arbeiten, z. B. Verzeichnisvorgängen und ACLs, verwenden Sie die Data Lake Storage Gen2-APIs, wie in diesem Artikel gezeigt.
Berücksichtigen Sie bei der Auswahl der APIs, die in einem bestimmten Szenario verwendet werden sollen, die Workload und die Anforderungen Ihrer Anwendung sowie die bekannten Probleme und die Auswirkungen eines HNS auf Workloads und Anwendungen.
Autorisieren des Zugriffs und Herstellen einer Verbindung mit Datenressourcen
Um mit den Codebeispielen in diesem Artikel zu arbeiten, müssen Sie eine autorisierte DataLakeServiceClient-Instanz erstellen, die das Speicherkonto darstellt. Sie können ein DataLakeServiceClient Objekt mithilfe von Microsoft Entra ID, einem Kontozugriffsschlüssel oder einer freigegebenen Zugriffssignatur (SHARED Access Signature, SAS) autorisieren.
Sie können die Azure-Identitätsclientbibliothek für Python verwenden, um Ihre Anwendung bei Microsoft Entra ID zu authentifizieren.
Erstellen Sie eine Instanz der DataLakeServiceClient-Klasse, und übergeben Sie ein DefaultAzureCredential-Objekt.
def get_service_client_token_credential(self, account_name) -> DataLakeServiceClient:
account_url = f"https://{account_name}.dfs.core.windows.net"
token_credential = DefaultAzureCredential()
service_client = DataLakeServiceClient(account_url, credential=token_credential)
return service_client
Weitere Informationen zur Verwendung von DefaultAzureCredential zum Autorisieren des Datenzugriffs finden Sie unter Übersicht: Authentifizieren von Python-Apps bei Azure mithilfe des Azure SDK.
Erstellen eines Containers
Ein Container fungiert als Dateisystem für Ihre Dateien. Sie können einen Container mittels der folgenden Methode erstellen:
Im folgenden Codebeispiel wird ein Container erstellt und ein FileSystemClient-Objekt für die spätere Verwendung zurückgegeben:
def create_file_system(self, service_client: DataLakeServiceClient, file_system_name: str) -> FileSystemClient:
file_system_client = service_client.create_file_system(file_system=file_system_name)
return file_system_client
Erstellen eines Verzeichnisses
Sie können einen Verzeichnisverweis im Container erstellen, indem Sie die folgende Methode verwenden:
Im folgenden Codebeispiel wird einem Container ein Verzeichnis hinzugefügt und ein DataLakeDirectoryClient-Objekt für die spätere Verwendung zurückgegeben:
def create_directory(self, file_system_client: FileSystemClient, directory_name: str) -> DataLakeDirectoryClient:
directory_client = file_system_client.create_directory(directory_name)
return directory_client
Umbenennen oder Verschieben eines Verzeichnisses
Sie können ein Verzeichnis mittels der folgenden Methode umbenennen oder verschieben:
Übergeben Sie den Pfad mit dem neuen Verzeichnisnamen im new_name-Argument. Der Wert muss das folgende Format haben: {Dateisystem}/{Verzeichnis}/{Unterverzeichnis}.
Das folgende Codebeispiel zeigt, wie ein Unterverzeichnis umbenannt wird:
def rename_directory(self, directory_client: DataLakeDirectoryClient, new_dir_name: str):
directory_client.rename_directory(
new_name=f"{directory_client.file_system_name}/{new_dir_name}")
Hochladen einer Datei in ein Verzeichnis
Sie können Inhalte mittels der folgenden Methode in eine neue oder vorhandene Datei hochladen:
Das folgende Codebeispiel zeigt, wie sie mithilfe der upload_data-Methode eine Datei in ein Verzeichnis hochladen:
def upload_file_to_directory(self, directory_client: DataLakeDirectoryClient, local_path: str, file_name: str):
file_client = directory_client.get_file_client(file_name)
with open(file=os.path.join(local_path, file_name), mode="rb") as data:
file_client.upload_data(data, overwrite=True)
Sie können diese Methode verwenden, um Inhalte zu erstellen und in eine neue Datei hochzuladen, oder Sie können das overwrite-Argument auf True festlegen, um eine vorhandene Datei zu überschreiben.
Anfügen von Daten an eine Datei
Verwenden Sie die folgende Methode, um Daten an eine Datei anzufügen:
- DataLakeFileClient.append_data-Methode.
Das folgende Codebeispiel zeigt, wie Daten mithilfe der folgenden Schritte an das Ende einer Datei angefügt werden:
- Erstellen Sie ein DataLakeFileClient - Objekt, um die Dateiressource darzustellen, mit der Sie arbeiten.
- Laden Sie Daten mithilfe der append_data-Methode in die Datei hoch.
- Schließen Sie den Upload ab, indem Sie die flush_data-Methode aufrufen, um die zuvor hochgeladenen Daten in die Datei zu schreiben.
def append_data_to_file(self, directory_client: DataLakeDirectoryClient, file_name: str):
file_client = directory_client.get_file_client(file_name)
file_size = file_client.get_file_properties().size
data = b"Data to append to end of file"
file_client.append_data(data, offset=file_size, length=len(data))
file_client.flush_data(file_size + len(data))
Mit dieser Methode können Daten nur an eine Datei angefügt werden, und der Vorgang ist auf 4.000 MiB pro Anforderung beschränkt.
Herunterladen aus einem Verzeichnis
Im folgenden Codebeispiel wird gezeigt, wie Sie eine Datei aus einem Verzeichnis mithilfe der folgenden Schritte in eine lokale Datei herunterladen:
- Erstellen Sie ein DataLakeFileClient - Objekt, um die Datei darzustellen, die Sie herunterladen möchten.
- Öffnen Sie eine lokale Datei zum Schreiben.
- Rufen Sie die DataLakeFileClient.download_file-Methode auf, um aus der Datei zu lesen, und schreiben Sie dann die Daten in die lokale Datei.
def download_file_from_directory(self, directory_client: DataLakeDirectoryClient, local_path: str, file_name: str):
file_client = directory_client.get_file_client(file_name)
with open(file=os.path.join(local_path, file_name), mode="wb") as local_file:
download = file_client.download_file()
local_file.write(download.readall())
local_file.close()
Verzeichnisinhalt auflisten
Sie können Verzeichnisinhalte auflisten, indem Sie die folgende Methode verwenden und das Ergebnis aufzählen:
Beim Aufzählen der Pfade im Ergebnis können beim Abrufen der Werte mehrere Anforderungen an den Dienst vorgenommen werden.
Im folgenden Codebeispiel wird der Pfad der einzelnen Unterverzeichnisse und Dateien ausgegeben, die in einem Verzeichnis gespeichert sind:
def list_directory_contents(self, file_system_client: FileSystemClient, directory_name: str):
paths = file_system_client.get_paths(path=directory_name)
for path in paths:
print(path.name + '\n')
Löschen eines Verzeichnisses
Sie können ein Verzeichnis mittels der folgenden Methode löschen:
Das folgende Codebeispiel zeigt, wie ein Verzeichnis gelöscht wird:
def delete_directory(self, directory_client: DataLakeDirectoryClient):
directory_client.delete_directory()