Verwenden von Python zum Verwalten von Dateien und Ordnern in Microsoft OneLake
In diesem Artikel wird gezeigt, wie Sie das Azure Storage Python-SDK zum Verwalten von Dateien und Verzeichnissen in OneLake verwenden können. Diese exemplarische Vorgehensweise behandelt den gleichen Inhalt wie Verwenden von Python zum Verwalten von Verzeichnissen und Dateien in ADLS Gen2 und hebt die Unterschiede beim Herstellen einer Verbindung mit OneLake hervor.
Voraussetzungen
Bevor Sie Ihr Projekt starten, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:
- Ein Arbeitsbereich in Ihrem Fabric-Mandanten mit Mitwirkendenberechtigungen.
- Ein Lakehouse im Arbeitsbereich. Optional können Sie Daten zum Lesen mithilfe von Python vorab laden.
Einrichten des Projekts
Installieren Sie aus Ihrem Projektverzeichnis die Pakete für die Azure Data Lake Storage- und Azure Identity-Clientbibliotheken. OneLake unterstützt die gleichen SDKs wie Azure Data Lake Storage (ADLS) Gen2 und unterstützt die Microsoft Entra Authentifizierung, die vom Azure-Identitätspaket bereitgestellt wird.
pip install azure-storage-file-datalake azure-identity
Fügen Sie als Nächstes Ihrer Codedatei die folgenden Import-Anweisungen hinzu:
import os
from azure.storage.filedatalake import (
DataLakeServiceClient,
DataLakeDirectoryClient,
FileSystemClient
)
from azure.identity import DefaultAzureCredential
Autorisieren des Zugriffs auf OneLake
Im folgenden Beispiel wird ein Dienstclient erstellt, der mit OneLake verbunden ist und mit dem Sie Dateisystemclients für andere Vorgänge erstellen können. Um sich bei OneLake zu authentifizieren, verwendet dieses Beispiel DefaultAzureCredential, um Anmeldeinformationen automatisch zu erkennen und das richtige Authentifizierungstoken abzurufen. Allgemeine Methoden zum Bereitstellen von Anmeldeinformationen für das Azure SDK umfassen die Verwendung des Befehls „az login“ in der Azure-Befehlszeilenschnittstelle oder das Cmdlet „Connect-AzAccount“ aus Azure PowerShell.
def get_service_client_token_credential(self, account_name) -> DataLakeServiceClient:
account_url = f"https://{account_name}.dfs.fabric.microsoft.com"
token_credential = DefaultAzureCredential()
service_client = DataLakeServiceClient(account_url, credential=token_credential)
return service_client
Weitere Informationen zur Verwendung von DefaultAzureCredential zum Autorisieren des Zugriffs auf Daten finden Sie unter Übersicht: Authentifizieren von Python-Apps bei Azure mithilfe des Azure SDKs.
Verwenden von Verzeichnissen
Um ein Verzeichnis in OneLake zu verwenden, erstellen Sie einen Dateisystemclient und einen Verzeichnisclient. Sie können diesen Verzeichnisclient verwenden, um verschiedene Vorgänge auszuführen, z. B. Umbenennen, Verschieben oder Auflisten von Pfaden (wie im folgenden Beispiel dargestellt). Sie können einen Verzeichnisclient auch beim Erstellen eines Verzeichnisses mithilfe der FileSystemClient.create_directory-Methode erstellen.
def create_file_system_client(self, service_client, file_system_name: str) : DataLakeServiceClient) -> FileSystemClient:
file_system_client = service_client.get_file_system_client(file_system = file_system_name)
return file_system_client
def create_directory_client(self, file_system_client : FileSystemClient, path: str) -> DataLakeDirectoryClient: directory_client
directory_client = file_system_client.GetDirectoryClient(path)
return directory_client
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')
Hochladen einer Datei
Sie können Inhalte mittels der Methode DataLakeFileClient.upload_data in eine neue oder vorhandene Datei 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(dataW, overwrite=True)
Beispiel
Im folgenden Codebeispiel listet die Verzeichnisinhalte eines beliebigen Ordners in OneLake auf.
#Install the correct packages first in the same folder as this file.
#pip install azure-storage-file-datalake azure-identity
from azure.storage.filedatalake import (
DataLakeServiceClient,
DataLakeDirectoryClient,
FileSystemClient
)
from azure.identity import DefaultAzureCredential
# Set your account, workspace, and item path here
ACCOUNT_NAME = "onelake"
WORKSPACE_NAME = "<myWorkspace>"
DATA_PATH = "<myLakehouse>.Lakehouse/Files/<path>"
def main():
#Create a service client using the default Azure credential
account_url = f"https://{ACCOUNT_NAME}.dfs.fabric.microsoft.com"
token_credential = DefaultAzureCredential()
service_client = DataLakeServiceClient(account_url, credential=token_credential)
#Create a file system client for the workspace
file_system_client = service_client.get_file_system_client(WORKSPACE_NAME)
#List a directory within the filesystem
paths = file_system_client.get_paths(path=DATA_PATH)
for path in paths:
print(path.name + '\n')
if __name__ == "__main__":
main()
Wenn Sie das Beispiel ausführen möchten, speichern Sie obigen Code in einer Datei namens listOneLakeDirectory.py
und führen den folgenden Befehl im selben Verzeichnis aus. Denken Sie daran, den Arbeitsbereich und Pfad im Beispiel durch Ihre eigenen Werte zu ersetzen.
python listOneLakeDirectory.py